![]() |
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 |
Re: Umwandlung TQuery in TADOQuery
Zitat:
Zitat:
|
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'...! |
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. |
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; |
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: :( |
Re: Umwandlung TQuery in TADOQuery
Zitat:
|
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 |
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 |
Re: Umwandlung TQuery in TADOQuery
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz