วิธีการเข้าถึงฐานข้อมูลหลายใน SQL ในแบบสอบถามใน VB 3.0

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 113701
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

เมื่อต้องการเข้าถึงข้อมูลจากแหล่งข้อมูลมากกว่าหนึ่งในแบบสอบถามเดียวในเวลาเดียวกัน คุณอาจจะต้องการใช้ที่เร็วที่สุด และทั่วไปมากที่สุดวิธี--แนบตารางจากแหล่งข้อมูลที่แตกต่างกันไปยังฐานข้อมูล Microsoft Access เดียวกัน ณจุดนั่น แบบสอบถามที่ขยายฐานข้อมูลที่แตกต่างกันสองสามารถถูกสร้างเป็นถ้าตารางทั้งหมด แนบ หรือโล คัล ได้เฉพาะกับฐานข้อมูล Microsoft Access
แนบตารางที่มีประสิทธิภาพการทำงานที่มีประสิทธิภาพและการจัดการข้อดี--โดยเฉพาะอย่างยิ่งถ้าคุณกำลังดำเนินการสอบถามซ้ำหลายครั้ง อย่างไรก็ตาม ในบางครั้งคุณอาจต้องการนำเส้นทางที่ช้ากว่าที่อธิบายไว้ในบทความนี้เมื่อคุณจำเป็นต้องใช้การสอบถามเฉพาะกิจซึ่ง encompass ฐานข้อมูลที่สองราย หรือมากกว่า บทความนี้อธิบายถึงวิธีการสร้างแบบสอบถามฐานข้อมูลซึ่งกันและกันเหล่านี้ทำงานช้า

ข้อมูลเพิ่มเติม

มีสองวิธีที่คุณสามารถใช้เพื่อระบุฐานข้อมูลภายนอกถูกเปิดอยู่

วิธีที่ 1

Microsoft Access SQL แสดงการอนุประโยค IN ที่ช่วยให้คุณสามารถเชื่อมต่อกับฐานข้อมูลที่ภายนอก (ฐานข้อมูลอื่นที่ไม่ใช่ฐานข้อมูลปัจจุบัน) วิธีการนี้ อย่างไรก็ตาม จำกัดคุณไปยังฐานข้อมูลภายนอกเพียงหนึ่งครั้ง

อนุประโยคของ IN มีสองส่วน ฐานข้อมูลชื่อ และสายอักขระการเชื่อมต่อ ชื่อฐานข้อมูลเป็นพาธที่มีคุณสมบัติทั้งหมดไปยังแฟ้มหรือไดเรกทอรีที่ประกอบด้วยแฟ้มฐานข้อมูล และสายอักขระการเชื่อมต่อประกอบด้วยชนิดของฐานข้อมูลและพารามิเตอร์อื่น ๆ ตามที่จำเป็น

เมื่อต้องการระบุฐานข้อมูลภายนอกมี ผนวกเครื่องหมายอัฒภาค () เพื่อเชื่อมต่อแบบส่วน และใส่ ด้วยอัญประกาศเดี่ยว หรือคู่ ตัวอย่างต่อไปนี้ใช้อนุประโยคของ IN เพื่อระบุตาราง (ลูกค้า) ในฐานข้อมูล IV dBASE (ขาย):
SELECT Customers.CustomerID
FROM Customers
IN "C:\DBASE\DATA\SALES" "dBASE IV;"
WHERE Customers.CustomerID Like "A*"
				
ใน Visual Basic คุณสามารถสร้างการ dynaset จากตัวอย่างข้างต้น โดยใช้โค้ด Visual Basic ต่อไปนี้:
Dim db As Database
Dim ds As Dynaset
Dim sql As String

' Open a database:
Set db = OpenDatabase("C:\VB\BIBLIO.MDB")

' Build the select statement, referencing the external dBASE IV file:
sql = "SELECT Customers.CustomerID, FROM Customers"
sql = sql & " IN 'C:\DBASE\DATA\SALES' 'dBASE IV;'"
sql = sql & " WHERE Customers.CustomerID Like 'A*'"

' Create the recordset:
Set ds = db.CreateDynaset(sql)

' Loop through and display the records:
While Not ds.EOF
   For i = 0 To ds.Fields.Count - 1
      Print ds(i); "  ";
   Next i
   Print
   ds.MoveNext
Wend
				

วิธีที่สอง

โปรแกรมการเข้าถึงของ Microsoft ที่ incorporated ลงใน Visual Basic รุ่น 3.0 สามารถแบ่งแบบสอบถาม SQL รวมสายอักขระการเชื่อมต่อที่ใช้ในการเปิดวัตถุฐานข้อมูล จากอนุประโยคของคำสั่ง SQL ที่ยอมรับชื่อในตารางที่ครบถ้วน ซึ่งช่วยให้การจัดวางสายอักขระการเชื่อมต่อในวงเล็บเหลี่ยมก่อนชื่อตาราง สายอักขระการเชื่อมต่อถูกคั่นจากชื่อตาราง โดยรอบระยะเวลา วิธีนี้ช่วยให้คุณสามารถเชื่อมต่อกับฐานข้อมูลภายนอกหลายในเวลาเดียวกัน

คุณสามารถเข้าถึงตารางใด ๆ ในฐานข้อมูลที่สองภายในคำสั่งหนึ่งที่เลือก โดยใช้รูปแบบนี้:
SELECT tbl1.fld1,tbl2.fld1
FROM [odbc;dsn=datasource;database=pubs;Username= <username>;PWD=<strong password>].tbl1,
[dbase iii;database=C:\DBASE3].tbl2
WHERE tbl1.fld1 = tbl2.fld1
				
ตัวอย่างนี้รวมตารางที่สองจากฐานสองอื่นข้อมูล แหล่งข้อมูล ODBC มีหนึ่งและอีกตาราง III dBASE ในไดเรกทอรี C:\DBASE3

โดยทั่วไป สายอักขระการเชื่อมต่อที่ใช้ในวงเล็บสี่เหลี่ยมที่นี่จะเหมือนกับลักษณะของการเชื่อมต่อของ TableDef เมื่อแนบหรือพารามิเตอร์สี่งบ OpenDatabase It will be in one of three forms depending on the database (ODBC, ISAM, or Microsoft Access).

For ODBC databases:
   [odbc;dsn=datasource;database=thedatabasename;Username=<username>;
PWD=<strong password>]
				
For ISAM databases:
   [paradox 3.X;database=C:\DATABASE\PARADOX3]
   [foxpro 2.5;database=C:\DATABASE\FOX25]
   [dbase iv;database=C:\DATABASE\DBASEIV]
   [btrieve;database=C:\DATABASE\BTRIEVE\FILE.DDF]
				
For Microsoft Access databases:
   [;database=C:\VB\BIBLIO.MDB]
				
หมายเหตุ:the leading semicolon for Microsoft Access databases is important. This is exactly the same string needed to fill the Connect property of a TableDef object before attaching the table to a Microsoft Access format database. The leading semicolon is a place holder for the unneeded database format specification and allows the "database=" clause to follow.

Code Example of a Multiple Database Query

This example creates a dynaset joining two tables from two data sources, one an SQL Server and the other a Microsoft Access database. The TestTab table is on the SQL Server and the T1 table is in the Microsoft Access database.

หมายเหตุ:You must change <username> and <strong password=""> to the correct values before you run this code. ตรวจสอบให้แน่ใจว่า ชื่อผู้ใช้มีสิทธิ์ที่เหมาะสมกับดำเนินการนี้กับฐานข้อมูล </strong></username>
Dim db As database
Dim ds As dynaset
Dim sql As String, Uid$, Pwd$

Set db = OpenDatabase("C:\VB\BIBLIO.MDB")
' This obtains a valid database object. It does not have to be a Microsoft
' Access database; the following works equally as well:
' Set db = OpenDatabase("C:\FOXPRO25\", 0, 0, "foxpro 2.5")

' The values here are hard-coded, but you could prompt the user for their
' user id and password.
Uid$ = <username>
Pwd$ = <strong password>

' Build the select statement, concatenating the user's id and password:
sql = "SELECT T1.F2, TestTab.F2, TestTab.F3"
sql = sql & " FROM [;database=C:\ACCESS\DB1.MDB].T1 , "
sql = sql & " [odbc;dsn=texas;database=playpen;Username=" & Uid$
sql = sql & ";PWD=" & Pwd$ & "].TestTab"
sql = sql & " WHERE T1.F1 = TestTab.F1"

' Execute the select query:
Set ds = db.CreateDynaset(sql)

' Loop through and display the records:
While Not ds.EOF
   For i = 0 To ds.Fields.Count - 1
      Print ds(i); "  ";
   Next i
   Print
   ds.MoveNext
Wend
				

Special Note Concerning Secured Microsoft Access Databases

If the Microsoft Access database is secured, the Visual Basic application must execute the SetDataAccessOption and SetDefaultWorkspace commands before executing any data access related code. This is required for a successful logon because Microsoft Access does not use the "Username=" and "PWD=" sections of the connect string. ตัวอย่าง::
   ' Establish the location of the SYSTEM.MDA files if in another
   ' directory other than the \WINDOWS directory:
   SetDataAccessOption 1, "C:\MYDIR\MYAPP.INI"
   ' Log on to a valid account:
   SetDefaultWorkspace "admin", "<password>"
				
When this is done, queries to the secured Microsoft Access database will succeed. However, note that because of this process, there is a built-in limitation for this ad hoc technique; only one secured Microsoft Access database can be accessed with an ad hoc query. This is because once the Microsoft Access engine is initialized in a session, with a particular user name and password combination, those values are retained until the session (Visual Basic executable program or session of the environment, VB.EXE) ends.

However, if more than two secured Microsoft Access databases need to be accessed for a query, the best approach is to move the actual tables from secured databases into one secured database. To do this, you need to change the password for the admin account to "" temporarily during the transfer operations. Then you could use Visual Basic code, such as that in the data access sample Visdata, to copy the tables.

ข้อมูลอ้างอิง

For additional information about Microsoft Access security, click the following article number to view the article in the Microsoft Knowledge Base:
105990INFO: How Visual Basic 3.0 Handles Security Set by Microsoft Access

คุณสมบัติ

หมายเลขบทความ (Article ID): 113701 - รีวิวครั้งสุดท้าย: 6 มกราคม 2554 - Revision: 2.0
Keywords: 
kbhowto kbsqlprog kbmt KB113701 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:113701
การปฏิเสธความรับผิดชอบในเนื้อหาของ KB ที่จะไม่มีการปรับปรุงอีกต่อไป
บทความนี้กล่าวถึงผลิตภัณฑ์ที่ Microsoft ไม่มีการสนับสนุนอีกต่อไป เนื้อหาของบทความจึงมีการนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com