AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Umwandlung TQuery in TADOQuery
Thema durchsuchen
Ansicht
Themen-Optionen

Umwandlung TQuery in TADOQuery

Ein Thema von Klarabella · begonnen am 27. Dez 2004 · letzter Beitrag vom 28. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
Klarabella

Registriert seit: 28. Sep 2004
59 Beiträge
 
#1

Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 08:49
Guten Morgen, liebe Delpianer...
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.
Wer kennt sich mehr aus als ich und kann mir helfen???

Gruß, Klarabella
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 09:15
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.

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.
  Mit Zitat antworten Zitat
Klarabella

Registriert seit: 28. Sep 2004
59 Beiträge
 
#3

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 09:26
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'...!
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 09:31
Was ist eine udl-Datei...
Und wenn ein Fehler kam, ists interessant mal den SQL Befehl zu sehen. So kann ich nichts sagen.
  Mit Zitat antworten Zitat
Klarabella

Registriert seit: 28. Sep 2004
59 Beiträge
 
#5

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 09:50
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;
  Mit Zitat antworten Zitat
Klarabella

Registriert seit: 28. Sep 2004
59 Beiträge
 
#6

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 13:27
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...

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???
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 14:45
Zitat von Klarabella:
Kann mir denn niemand helfen???
Hast du vielleicht RequestLive auf TRUE gesetzt? Warum nimmst du nicht eine 2. TADOQuery Komponente um deine View zu erstellen?
  Mit Zitat antworten Zitat
eminorm

Registriert seit: 27. Dez 2004
Ort: Halle
2 Beiträge
 
Delphi 6 Personal
 
#8

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 15:51
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
  Mit Zitat antworten Zitat
eminorm

Registriert seit: 27. Dez 2004
Ort: Halle
2 Beiträge
 
Delphi 6 Personal
 
#9

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 16:21
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
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Umwandlung TQuery in TADOQuery

  Alt 27. Dez 2004, 18:24
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 Uhr.
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