Με τον τρόπο για να αποκτήσουν πρόσβαση σε πολλές βάσεις δεδομένων σε ένα ερώτημα SQL σε VB 3.0

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 113701
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Όταν αποκτάτε πρόσβαση σε δεδομένα από περισσότερα από ένα αρχείο προέλευσης δεδομένων ταυτόχρονα σε ένα μονό ερώτημα, ίσως θελήσετε να χρησιμοποιήσετε τη μέθοδο ταχύτερο και πιο γενικές--επισύναψη των πινάκων από τις διαφορετικές προελεύσεις δεδομένων σε μια μεμονωμένη βάση δεδομένων της Microsoft Access. Σε αυτό το σημείο, ερωτήματα που εκτείνονται σε δύο διαφορετικές βάσεις δεδομένων μπορεί να δημιουργηθεί σαν όλους τους πίνακες, συνημμένο ή τοπικές, τοπική βάση δεδομένων της Microsoft Access.
Προσάρτηση πινάκων διαθέτει ισχυρές επιδόσεις και διαχείρισης πλεονεκτήματα--, ειδικά εάν που εκτελείτε επανειλημμένα ερωτήματα. Ωστόσο, μερικές φορές μπορεί να θέλετε να αναλάβετε την πιο αργή δρομολόγηση που περιγράφεται σε αυτό το άρθρο, όταν χρειάζεται να χρησιμοποιήσετε ad hoc ερωτήματα που περιλαμβάνουν δύο ή περισσότερες βάσεις δεδομένων. Αυτό το άρθρο εξηγεί πώς μπορείτε να δημιουργήσετε αυτά τα ερωτήματα βάσης δεδομένων-σύντομη χαμηλότερες.

Περισσότερες πληροφορίες

Υπάρχουν δύο μέθοδοι που μπορείτε να χρησιμοποιήσετε για να καθορίσετε μια βάση δεδομένων έξω από αυτήν που είναι ανοιχτή αυτήν τη στιγμή.

Πρώτη μέθοδος

Microsoft SQL της Access παρέχει έναν όρο in που σας επιτρέπει να συνδεθείτε με μια εξωτερική βάση δεδομένων (μια βάση δεδομένων διαφορετική από την τρέχουσα βάση δεδομένων). Αυτή η μέθοδος, ωστόσο, περιορισμός που μόνο μια εξωτερική βάση δεδομένων κάθε φορά.

Τον όρο IN αποτελείται από δύο τμήματα, όνομα βάσης δεδομένων και η συμβολοσειρά σύνδεσης. Το όνομα της βάσης δεδομένων είναι έγκυρη διαδρομή για το αρχείο ή τον κατάλογο που περιέχει το αρχείο βάσης δεδομένων και η συμβολοσειρά σύνδεσης περιέχει τον τύπο της βάσης δεδομένων και άλλες παραμέτρους, ανάλογα με τις ανάγκες.

Για να καθορίσετε μια εξωτερική βάση δεδομένων, να προσαρτήσετε ένα ερωτηματικό (;) για σύνδεση στο τμήμα και περικλείστε το σε απλά ή διπλά εισαγωγικά. Το ακόλουθο παράδειγμα χρησιμοποιεί τον όρο IN για να καθορίσετε έναν πίνακα (πελάτες) σε μια βάση δεδομένων IV dBASE (ΠΩΛΗΣΕΙΣ):
SELECT Customers.CustomerID
FROM Customers
IN "C:\DBASE\DATA\SALES" "dBASE IV;"
WHERE Customers.CustomerID Like "A*"
				
Στη Visual Basic, μπορείτε να δημιουργήσετε ένα δυναμοσύνολο από το παραπάνω παράδειγμα, χρησιμοποιώντας τον παρακάτω κώδικα της 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 Access ενσωματωθεί σε Visual Basic έκδοση 3.0 μπορούν να αναλύουν ερωτήματα SQL ώστε να περιλαμβάνει τη συμβολοσειρά σύνδεσης που χρησιμοποιείται για το άνοιγμα ενός αντικειμένου βάσης δεδομένων. Στον όρο From της δήλωσης 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 και το άλλο έναν πίνακα dBASE III στον κατάλογο C:\DBASE3.

Σε γενικές γραμμές, η συμβολοσειρά σύνδεσης εδώ χρησιμοποιούνται σε τετράγωνες αγκύλες είναι πανομοιότυπη με την ιδιότητα Connect ενός αντικειμένου TableDef, κατά την επισύναψη ή την τέταρτη παράμετρο της πρότασης OpenDatabase. Θα είναι σε μία από τις τρεις μορφές ανάλογα με τη βάση δεδομένων (ODBC, ISAM ή η Microsoft Access).

Για βάσεις δεδομένων ODBC:
   [odbc;dsn=datasource;database=thedatabasename;Username=<username>;
PWD=<strong password>]
				
Για βάσεις δεδομένων ISAM:
   [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]
				
Για βάσεις δεδομένων της Microsoft Access:
   [;database=C:\VB\BIBLIO.MDB]
				
ΣΗΜΕΙΩΣΗτο ελληνικό ερωτηματικό στην αρχή για τις βάσεις δεδομένων της Microsoft Access είναι σημαντική. Αυτό είναι ακριβώς την ίδια συμβολοσειρά που είναι απαραίτητο να συμπληρώσετε την ιδιότητα Connect ενός αντικειμένου TableDef, πριν από την προσάρτηση του πίνακα σε μια μορφή βάσης δεδομένων Microsoft Access. 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. Make sure that Username has the appropriate permissions to perform this operation on the database. </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

Ιδιότητες

Αναγν. άρθρου: 113701 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Λέξεις-κλειδιά: 
kbhowto kbsqlprog kbmt KB113701 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:113701
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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