Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Umwandlung TQuery in TADOQuery (https://www.delphipraxis.net/36853-umwandlung-tquery-tadoquery.html)

Klarabella 27. Dez 2004 08:49


Umwandlung TQuery in TADOQuery
 
Guten Morgen, liebe Delpianer... :hi:
Hab da ein Problem.

Ich hatte in meinem Programm bisher eine TQuery, die auf die Datenbank zugreift und Daten ausliest.
Diese TQuery habe ich nun aber in eine ADOQuery umgewandelt, weil ich zu Beginn den Connectionstring aus einer udl-Datei zuweisen will, was mit TQuery scheinbar nicht möglich ist.

Das Programm lief bisher ohne Probleme. Mit dem ADOQuery wirft es mir fehlermeldungen aus:

"Meldung: 'Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht. Der angeforderte Vorgang benötigt einen aktuellen Datensatz'"
Dies sagt er mir, wenn ich versuche, die Connection vor ExecSQL zu schließen.

"Meldung: 'qryDatenbank: Operation bei geöffneter Datenmenge nicht ausführbar'."
Und das sagt er mir, wenn ich die Datenbank-connection vorher nicht schließe...

Bin ein wenig ratlos. :gruebel:
Wer kennt sich mehr aus als ich und kann mir helfen???

Gruß, Klarabella

Jelly 27. Dez 2004 09:15

Re: Umwandlung TQuery in TADOQuery
 
Zitat:

Zitat von Klarabella
Diese TQuery habe ich nun aber in eine ADOQuery umgewandelt, weil ich zu Beginn den Connectionstring aus einer udl-Datei zuweisen will, was mit TQuery scheinbar nicht möglich ist.

Eine Query ist ja auch was ganz anderes als ne ADOQuery. Die Query setzt entweder auf der BDE oder einem ODBC Treiber auf. Die ADOQuery halt eben auf ADO. Das sind 2 Paar Schuh. :zwinker:

Zitat:

Zitat von Klarabella
"Meldung: 'Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht. Der angeforderte Vorgang benötigt einen aktuellen Datensatz'"
Dies sagt er mir, wenn ich versuche, die Connection vor ExecSQL zu schließen.

"Meldung: 'qryDatenbank: Operation bei geöffneter Datenmenge nicht ausführbar'."

Da versteh ich nicht was du da machst. Wenn du die Connection schlißt, besteht keine Verbindung mehr zur Datenbank. Folglich muss ein ExecSQL fehlschlagen. Ausserdem ist es vielleicht hilfreich, den SQL Befehel mal zu posten, den du mit ExecSQL aufrufst. Eventuell ist auch da der Fehler drin.

Klarabella 27. Dez 2004 09:26

Re: Umwandlung TQuery in TADOQuery
 
Hallo Tom,

ich muss gestehen, dass ich mich nicht wirklich gut auskenne... Da hab ich dann halt eben als einzige Möglichkeit für mich gesehen, über eine Ado Connection an die udl-Connection zu kommen...

Oder kannst du mir helfen, wie ich eine *.udl Datei als Connection für eine TQuery bekomme???

Gruß, Klarabella.


PS: Ich hab die Connection ja nur geschlossen, weil mit Ado die Fehlermeldung kam 'qryDatenbank: Operation bei geöffneter Datenmenge nicht ausführbar'...!

Jelly 27. Dez 2004 09:31

Re: Umwandlung TQuery in TADOQuery
 
Was ist eine udl-Datei...
Und wenn ein Fehler kam, ists interessant mal den SQL Befehl zu sehen. So kann ich nichts sagen.

Klarabella 27. Dez 2004 09:50

Re: Umwandlung TQuery in TADOQuery
 
Eine .udl-Datei ist eine Datei, in der ein Benutzer seine Connection per "Datenverknüpfungseigenschaften" einstellen kann...
Dort werden alle notwendigen Parameter gespeichert.

Ich habe vorher den Datenbankzugriff über die Komponente TQuery - DataBaseName gesteuert... Aber das ist nicht möglich, weil die Benutzer des Programms alle andere Connections haben.
Diese müssen sie jeweils vorher eingeben. Da erschien mir der "Datenverknüpfungsmanager" von Windows eigentlich ganz passend...

Andere Ideen???

HIer ist die SQL-Abfrage:

Delphi-Quellcode:
sql1 := 'CREATE VIEW Garantie_View AS ' +
          'SELECT hs.vk_snr_cnr.ablaufdatum, hs.vk_beleg_pos.bf_pov_feld_5, ' +
          'hs.vk_artikel.artikelnr, hs.vk_artikel.bezeichnung1, ' +
          'hs.vk_snr_cnr.nr, hs.std_knd_lif.kl_nr, hs.std_knd_lif.bezeichnung, ' +
          'hs.std_knd_lif.bf_kd_feld_1, hs.vk_beleg.belegnr, ' +
          'hs.vk_beleg.belegart, hs.vk_beleg.belegdatum ' +
          'FROM hs.std_knd_lif ' +
          'INNER JOIN hs.vk_beleg ON (hs.std_knd_lif.kl_nr = hs.vk_beleg.kl_nr) ' +
          'INNER JOIN hs.vk_beleg_pos ON (hs.vk_beleg.belegnr = hs.vk_beleg_pos.belegnr) ' +
          'INNER JOIN hs.vk_artikel ON (hs.vk_artikel.artikelnr = hs.vk_beleg_pos.artikelnr) ' +
          'INNER JOIN hs.vk_blgpos_snr_cnr ON (hs.vk_beleg.belegnr = hs.vk_blgpos_snr_cnr.belegnr) ' +
          'AND (hs.vk_beleg_pos.zeilenschluessel = hs.vk_blgpos_snr_cnr.zeilenschluessel) ' +
          'INNER JOIN hs.vk_snr_cnr ON (hs.vk_blgpos_snr_cnr.id_snr_cnr = hs.vk_snr_cnr.id) ' +
          'WHERE (hs.vk_beleg.belegartgruppe = ''V40'') ' +
          'AND (hs.std_knd_lif.kunde_lieferant = ''KD'')';
try
    //View "Garantie_View" wird erstellt:
    qryDatenbank.SQL.Text := sql1;
    qryDatenbank.ExecSQL;
except
    abort;
end;

Klarabella 27. Dez 2004 13:27

Re: Umwandlung TQuery in TADOQuery
 
sooo, ich hab mir das jetzt alles noch mal angesehen, und habe beschlossen, euch noch mal ein wenig an meinen Gedanken teil haben zu lassen - hoffe immer noch, dass mir jemand helfen kann... :wink:

Also...

Ich rufe zu Anfang die Ado Query auf und lass die einen Select-Befehl ausführen. Das funktioniert soweit tadellos.

Anschließend (in einer anderen Funktion) möchte ich mit derselben Query zwei Views auf die Datenbank erstellen lassen.
Wenn ich jedoch ExecSQL aufrufe, bekomme ich die Fehlermeldung "Operation bei geöffneter DAtenmenge nicht ausführbar".
Setze ich vorher "Active = false", dann krieg ich wiederum die Fehlermeldung: 'Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht. Der angeforderte Vorgang benötigt einen aktuellen Datensatz'.

Kann mir denn niemand helfen??? :cry: :(

Jelly 27. Dez 2004 14:45

Re: Umwandlung TQuery in TADOQuery
 
Zitat:

Zitat von Klarabella
Kann mir denn niemand helfen??? :cry: :(

Hast du vielleicht RequestLive auf TRUE gesetzt? Warum nimmst du nicht eine 2. TADOQuery Komponente um deine View zu erstellen?

eminorm 27. Dez 2004 15:51

Re: Umwandlung TQuery in TADOQuery
 
1. Problemlösungen für die unterschiedlichen DB

1.1 (für dich einfache Variante, aber Benutzerunfreundlich)
Das mit den Verschiedenen DB kannst du doch umgehen indem du in deinem ADOConnection keinen
Conectionstring angibst, sonder das so baust, das der Benutzer die DB jedesmal manuell
auswählen muss.

1.2 (Benutzerfreundlichste Variante)
Wenn du weisst, das die DB nur an unterschiedlichen Orten auf der Platte liegen, kannst du eine
Prozedure schreiben, die auf der Festplatte nach dem Namen sucht und dann den Connectionstring
selbst bei Programmstart einträgt.

1.3 (für dich die einfachste Variante)
Du zwingst die Nutzer die DB im gleichen Verzeichnis abzulegen.

2. ADOQuery

2.1
Ich weiss nun nicht ob du alle notwendigen Komponenten auf deiner Unit hast (ADOConnection,
DataSource, ADOQuery) und ob diese auf das richtige zeigen.
2.2
Noch ne Variante wäre es wenn du das View schon auf der DB baust und dann nur noch wie eine
normale Tabelle selectierst

Vielleicht kannst du ja mal sagen auf was du für eine DB zugreifst (Oracle,MS-SQL,MySQL,DBase, usw.)??

mfg eminorm

eminorm 27. Dez 2004 16:21

Re: Umwandlung TQuery in TADOQuery
 
Nachtrag zu Beitrag von mir!

Ihr hab da einen kleinen Denkfehler drin.
Ein Query brauch immer eine Datenmenge zurück, von daher geht das mit dem View bauen im ADOQuery net.
Um ein View zu bauen benutzt man ADOCommand, weil dieses Befehle wie z.B. Create,Replace oder Drop ausführen kann.

Mfg eminorm

Jelly 27. Dez 2004 18:24

Re: Umwandlung TQuery in TADOQuery
 
Zitat:

Zitat von eminorm
Ein Query brauch immer eine Datenmenge zurück, von daher geht das mit dem View bauen im ADOQuery net.

Dem muss ich widersprechen. Lediglich wenn man ein Query mit Open öffnet, wird eine Datenmenge zurückgegeben. Führst du aber einen SQL befehl via ExecSQL Prozedur auf, klappt auch das Erstellen einer View. Daran liegt Klarabellas Problem denk ich also nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz