| |
VB & DatenbankentempDB mit ADO | | | Autor: GuckInDieLuft | Datum: 02.01.12 12:40 |
| Seit längerem habe ich mit VB6 den Zugriff auf den SQLServer über ODBC realisiert und arbeite öfters mit temporären Tabellen, die in der tempDB abgespeichert werden (##TMP...).
Jetzt wollte ich auf ADO umstellen. Der Zugriff auf die "normalen" Tabellen funktioniert problemlos, allerdings gibt es Probleme mit der tempDB ("Kann TAbelle ##tmp... nicht finden"). Wenn ich die Tabelle in der "normalen" Datenbank abspeichere funktioniert es wieder.
Kann mir jemand helfen?
Ist es sinnvoll von ODBC auf ADO umzustellen? (Geschwindigkeit?)
Vielen Dank im Voraus. | |
Re: tempDB mit ADO | | | Autor: wb-soft | Datum: 16.01.12 21:18 |
| Hi!
Ich verstehe die Problemstellung nicht.
Erklär das mal genauer. Eventuell mit einem Code-Schnipsel.
Wenn du mit der bisherigen Version keine Probleme hast, laß alles wie es ist.
ADO wäre schon besser, aber der Aufwand für die Umstellung lohnt sich kaum.
mfg
WB | |
Re: tempDB mit ADO | | | Autor: GuckInDieLuft | Datum: 17.01.12 09:55 |
| Hallo WB,
vielen Dank für Deine Bemühungen.
Bisher habe die Verbindung zur Datenbank über einen ODBC-Treiber realisiert. Im Programm steht dann folgender Code:
' Verbindung zur Datenbank
Set goConn = New ADODB.Connection
goConn.ConnectionString = "DSN=" & gsODBC & ";UID=" & gsUID & ";PWD=" & gsPWD & "; "
goConn.Open
...
' Aufbau einer temporären Tabelle:
' AktuelleDatumString ist aktuelles Datum und Uhrzeit
' Die temporäre Tabelle wird in der tempDB gespeichert#
' Der Programmname ist variabel, damit es zu keinen doppelten Tabellennamen kommt.
gsTempTabelle = "##TMP_" & gsTransaktion & Trim(gsAnwender) & DatumsFunktionen.AktuellDatumString
SQL = "CREATE TABLE " & gsTempTabelle & _
" ( Mandant_Nr INT NULL, " & _
" Kunden_IDSNr INT NULL, " & _
" Artikel_IDSNr INT NULL) "
goConn.Execute SQL
...
SQL= "SELECT * FROM " & gsTempTabelle
goRS.Open SQL, goConn, adOpenDynamic, adLockOptimistic
==> Dieser Ablauf funktioniert.
---------------------------------
Angebblich ist die Anbindung über ADO schneller, deshalb wollte ich den Datenbanbkzugriff ändern:
Set goConn = New ADODB.Connection
goConn.ConnectionString = "provider=SQLOLEDB.1;" & _
"data source='" & gsServer & "';" & _
"Initial Catalog='" & gsDatenbank & "';" & _
"user id='" & gsUID & "';" & _
"password='" & gsPWD & "'"
goConn.Open
...
gsTempTabelle = "##TMP_" & gsTransaktion & Trim(gsAnwender) & DatumsFunktionen.AktuellDatumString
Der Zugriff auf die Datenbank funktioniert hier ebenfalls, allerdings beim Lesen der temporären Tabelle erscheint ein Fehler ("kann Tabelle nicht finden").
Wenn ich die beiden ## aus dem Tabellennamen herausnehme, die Tabelle somit in der "normalen" Datenbank speichere, funktioniert das Programm wieder.
Mittlerweile habe Geschwindigkeitstests gemacht, das Programm wurde aber erheblich langsamer.
Mache ich bei der Anbindung etwas verkehrt?
Mfg | |
Re: tempDB mit ADO | | | Autor: wb-soft | Datum: 17.01.12 10:44 |
| Hi!
Ok, jetzt habe ich das Problem verstanden. Allerdings habe ich keine Erfahrung in dieser Richtung.
Hast du überprüft, ob die Tabelle tatsächlich erstellt wird, und ob sie zum Zeitpunkt der Abfrage noch existiert?
Könnte es sein, daß die Tabelle gelöscht wird, weil die Verbindung ab- und wieder aufgebaut wird?
Wie schon gesagt ist durch den Umstieg auf ADO keine wesentliche Verbesserung zu erwarten.
mfg
WB | |
Re: tempDB mit ADO | | | Autor: wb-soft | Datum: 17.01.12 13:38 |
| Hi!
Ich hab jetzt mal bei mir getestet.
Wenn die Verbindung zwischen der Tabellenerstellung und der Abfrage nicht getrennt wird, funktioniert es.
mfg
WB | |
Re: tempDB mit ADO | | | Autor: GuckInDieLuft | Datum: 17.01.12 15:49 |
| Hallo WB,
geht die Verbindung zur Datenbank nicht erst verloren, wenn das Objekt ("goConn") geschlossen wird? Und das geschieht, wenn das Programm verlassen wird.
Anders gefagt: Was muss ich machen, damit die Verbindung nicht verloren geht?
Mfg | |
Re: tempDB mit ADO | | | Autor: wb-soft | Datum: 17.01.12 16:59 |
| Hi!
Du hast Recht.
Allerdings gibt es auch Gründe, die Connection für jeden Zugriff zu öffnen, und wieder zu schließen.
Wenn die Verbindung zur DB über Internet hergestellt wird, mache ich es so.
Bei dir ist das nicht der Fall. Wenn die Verbindung durch einen Fehler verloren geht, entsteht beim nächsten Zugriff ein Fehler. Wenn der Zugriff auf "normale" Tabellen funktioniert, besteht die Verbindung noch.
Dein Problem muß wo anders liegen. Mein Test hat nur ergeben, daß es mit ADO genauso funktioniert wie mit ODBC.
Leider habe ich keine Idee, mit der ich dir weiter helfen könnte.
mfg
WB | |
Re: tempDB mit ADO | | | Autor: GuckInDieLuft | Datum: 17.01.12 17:18 |
| Hallo WB,
vielen Dank für Deine Bemühungen.
Wegen der Geschwindigkeit werde ich noch ein paar Tests durchführen und wahrscheinlich bei der jetzigen Einstellung (ODBC) bleiben.
Mfg | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|