Seite 1 von 2
Datenbank
Verfasst: 12.10.2004 13:42
von lapo
Hallo Zusammen!
Ich hab' da ein kleines Problem mit dem Zugriff auf eine Datenbank mittels ODBC.
Ich habe eine führende Tabelle die ich komplett auslesen muß. Hieraus resultierend erhalte ich eine Key mit dem weitere 5 Tabellen zugegriffen werden soll.
Den Zugriff auf die Datenbank habe ich mit OpenDatabase erfolgreich hinter mir. Anschließend lese ich mittels DatabaseQuery und NextDatabaseRow die entsprechenden Zeilen der führenden Datenbank aus. Wenn ich nun in der Schleife (bei NextDatabaseRow) ein neues DatabaseQuery absetzte funktioniert das ganze nicht mehr....
Wie kann ich mein Problem lösen?? - Kann mir jemand weiter helfen??
Danke Ralf
Re: Datenbank
Verfasst: 12.10.2004 13:50
von Kiffi
> Wie kann ich mein Problem lösen??
meine Kristallkugel ist gerade in Reparatur.
Hast Du mal 'n Stückchen Code für uns?
Grüße ... Kiffi
Verfasst: 12.10.2004 14:03
von lapo
Hallo Kiffi!
meine Kristallkugel ist gerade in Reparatur.
Schade das Deine Kristallkugel nicht griffbereit ist....
Ich habe einen kleinen Codeausschnitt für Dich/Euch:
Code: Alles auswählen
RetVal = DatabaseQuery("Select AKZ, HGKZ, HSTR, HSTN, HHNZ from SvKo.FzSqHaltt WHERE AKZ LIKE 'KO%'")
While NextDatabaseRow()
HalttAkz.s = Trim(GetDatabaseString(0))
HalttHgkz.s = Trim(GetDatabaseString(1))
HalttHStr.s = Trim(GetDatabaseString(2))
HalttHStn.s = Trim(GetDatabaseString(3))
HalttHhNz.s = Trim(GetDatabaseString(4))
PrintN("HALTT --> " + HalttAkz + HalttHgkz + HalttHstr + HalttHStn + HalttHhNz)
PrintN("Select AKZ, SGKZ, SSTR, SHNR from SvKo.FzSqSortt WHERE AKZ = '"+ HalttAkz+"'")
RetVal = DatabaseQuery("Select AKZ, SGKZ, SSTR, SHNR from SvKo.FzSqSortt WHERE AKZ = '"+ HalttAkz+"'")
If RetVal = 0
dbFehler = DatabaseError()
MessageRequester(" Fehler ", "Fehler bei: Select AKZ, SGKZ, SSTR, SHNR, SHHNZ from SvKo.FzSqSortt WHERE AKZ = '"+ HalttAkz + "' --> " + dbFehler + " Programm wird beendet....", 0)
PgmEnde()
EndIf
SorttAkz.s = Trim(GetDatabaseString(0))
SorttSgKz.s = Trim(GetDatabaseString(1))
SorttSStr.s = Trim(GetDatabaseString(2))
SorttSHnr.s = Trim(GetDatabaseString(3))
PrintN("SORTT --> " + SorttAkz + SorttSgKz + SorttSStr + SorttSHnr)
Wend
Grüße
Ralf
Verfasst: 12.10.2004 14:22
von Kiffi
Code: Alles auswählen
RetVal = DatabaseQuery("Select AKZ, HGKZ, HSTR, HSTN, HHNZ from SvKo.FzSqHaltt WHERE AKZ LIKE 'KO%'")
While NextDatabaseRow()
[...]
RetVal = DatabaseQuery("Select AKZ, SGKZ, SSTR, SHNR from SvKo.FzSqSortt WHERE AKZ = '"+ HalttAkz+"'")
[...]
Wend
lt. PB-Hilfe bezieht sich NextDatabaseRow() immer auf den zuvor
abgesetzen DatabaseQuery(). Aus diesem Grund beinflusst das innere
DatabaseQuery die darüberliegende NextDatabaseRow-Anweisung.
HTH
Grüße ... Kiffi
Verfasst: 12.10.2004 14:33
von lapo
Hallo Kiffi!
Ja das ist klar.
Gibt es aber eine Möglichkeit das von mir gewünschte Ergebnis zu erzielen (eine Tabelle führend und die restlichen Lesen aufgrund des ermittelten Keys aus der führenden Tabelle)?
Ralf
Verfasst: 12.10.2004 14:38
von Kiffi
> Gibt es aber eine Möglichkeit das von mir gewünschte Ergebnis zu erzielen
> (eine Tabelle führend und die restlichen Lesen aufgrund des ermittelten
> Keys aus der führenden Tabelle)?
mmh, da sehe ich nur die Möglichkeit, die Keys der führenden Tabelle in
einem Rutsch in eine LinkedList einzulesen und diese dann für weitere
DB-Operationen zu verwenden.
Die DB-Gurus hier (sofern vorhanden) mögen mich berichtigen, wenn ich da
falsch liege.
Grüße ... Kiffi
Verfasst: 12.10.2004 14:53
von lapo
Funktioniert es evtl. wenn ich die Datenbank 2x öffne und dann in der Schleife mittels UseDatabase wechsel???
Bis hierhin erst mal danke...
Ralf
Verfasst: 12.10.2004 15:33
von Kiffi
> Funktioniert es evtl. wenn ich die Datenbank 2x öffne und dann in der
> Schleife mittels UseDatabase wechsel???
müsste eigentlich funktionieren. Im Zweifelsfall: Ausprobieren
Grüße ... Kiffi
Verfasst: 12.10.2004 15:36
von lapo
Ich hab's mal mit UseDatabase probiert - und es funktioniert...
Fragt sich nur was es unter umständen für folgen hat (Geschwindigkeit und so)
Danke
Ralf
Verfasst: 12.10.2004 15:39
von bobobo
die Bremse ist ODBC und nicht die Anwendung und ODBC ist eh schon in Verwendung.
ein Geschwindigkeitsvorteil wäre marginal