Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi fehlermeldung in der query... (https://www.delphipraxis.net/16613-fehlermeldung-der-query.html)

Sulustaner2004 20. Feb 2004 08:22


fehlermeldung in der query...
 
Guten Morgen,
und da bin ich wieder mit meiner obligatorischen morgenfrage...:-)

Ich bin dabei mehrere Textboxen über eine Query anzusprechen und dank Button in eine Datenbank zu schreiben...soweit so gut...
nun bekomme ich allerdings schon bei der 2. Textbox die Fehlermeldung Adoquery1: Operation bei geschlossener Datenmenge nicht ausführbar
nun meine frage an euch...woran könnte das liegen ???

Delphi-Quellcode:
//----------erste Textbox--------------\\

   if adoquery1.Locate('Versuchs_ID',tb_versuch_id.Text,[])then

      adoquery1.FieldByName('Versuchs_ID').AsString;

    with adoquery1 do
     begin
     close;
     sql.Clear;
     sql.Add('UPDATE dbo_Versuchsflaechen_ST');
     sql.Add('SET Versuchs_ID =' + QuotedStr (tb_versuch_id.Text));
     sql.Add('WHERE Versuchsfl_Bezeichnung =' + quotedstr(cbo_bezeichnung.Text));
     //sql.Add('SELECT dbo_Versuchsflaechen_ST.Versuchs_ID,');
     //sql.Add('dbo_Versuchsflaechen_ST.Versuchsfl_Bezeichnung, dbo_Versuchsflaechen_ST.Versuchs_ID');
     //sql.Add('FROM dbo_Versuchsflaechen_ST');
     //sql.Add('WHERE dbo_Versuchsflaechen_ST.Versuchsfl_Bezeichnung ='+ quotedstr(versflid));
     //open;
     ExecSQL;
     end;

   while not adoquery1.Eof do
    begin
     adoquery1.Edit;
     adoquery1.FieldByName('Versuchs_ID').Asstring:=tb_versuch_id.Text;
     adoquery1.Post;
     tb_versuch_id.Clear;
     adoquery1.Next;
    end;
 

  //----------------zweite Textbox--------------\\

   // Bei dieser if Anweisung springt er dann raus...
   if adoquery1.Locate('Behandlung',tb_behandlung.Text,[])then
       adoquery1.FieldByName('behandlung').AsString;



    with adoquery1 do
     begin
     close;
     sql.Clear;
     sql.Add('UPDATE dbo_Versuchsflaechen_ST');
     sql.Add('SET Behandlung =' + QuotedStr (tb_behandlung.Text));
     sql.Add('WHERE Versuchsfl_Bezeichnung =' + quotedstr(cbo_bezeichnung.Text));
     //open;
     ExecSQL;
     end;




   while not adoquery1.Eof do
    begin
     adoquery1.Edit;
     adoquery1.FieldByName('Behandlung').Asstring:=tb_behandlung.Text;
     adoquery1.Post;
     tb_behandlung.Clear;
     adoquery1.Next;
    end;
bei der ersten box klappt das tadellos nur ei der 2. nicht mehr... :wall:

Sharky 20. Feb 2004 08:33

Re: fehlermeldung in der query...
 
Hai Sulustaner2004,

Zitat:

Zitat von Sulustaner2004
...
Delphi-Quellcode:
   while not adoquery1.Eof do
    begin
     adoquery1.Edit;
     adoquery1.FieldByName('Versuchs_ID').Asstring:=tb_versuch_id.Text;
     adoquery1.Post;
     tb_versuch_id.Clear;
>>>>>    adoquery1.Next;
    end;
  //----------------zweite Textbox--------------\\

   // Bei dieser if Anweisung springt er dann raus...
   if adoquery1.Locate('Behandlung',tb_behandlung.Text,[])then
       adoquery1.FieldByName('behandlung').AsString;
.
.

Durch Dein .Next springst Du ja immer zum nächsten Datensatz. Dadurch ist dein DataSet nicht mehr im Edit-Modus!
Ausserdem hast Du da echt böse fehler (ist nicht böse gemeint von mir!!). Beschreib doch mal am besten was Du machen möchtest.

Sulustaner2004 20. Feb 2004 08:44

Re: fehlermeldung in der query...
 
Liste der Anhänge anzeigen (Anzahl: 1)
also ich muss für mein praktikum hier eine eingabemaske erstellen die auf eine datenbank zugreift...
das lesen der daten klappt ohne probleme nur eben das schreiben klappt nicht
er springt wie gesagt nach der ersten textbox raus...
ich gebe dir die form mal als bitmap mit...vieleicht kkannst du dir ja dann mal ein bild machen @ sharky
und ich bin dir nicht böse wenn du sagst das ich fehler drin habe... :-) darum habe ich ja gefragt :-)

[edit=Sharky]Bild als JPG angehängt. Ist doch etwas kleiner als deine 1.x MB Version ;-) Mfg, Sharky[/edit]

sorry...könnte auf die schnelle keine jpg datei erzeugen.. :-)

Sharky 20. Feb 2004 09:07

Re: fehlermeldung in der query...
 
Jetzt fehlt nur noch eine kleine Beschreibung was passieren soll.

Ich sehe dein Dropdown-Feld. Wofür ist dieses?
Was hat es mit dem Feld "Versuchs_id" auf sich?

Sulustaner2004 20. Feb 2004 09:14

Re: fehlermeldung in der query...
 
um ehrlich zu sein darf ich dir darüber nicht sonderlich viel erzählen...nur so viel...
mit dem drpdown feld werden versuchsflächen ausgeählt du bei der aktivierung der form dort reingeschreiben werden...unter jedem textfeld befindet sich ein label was die eventuell vorhandenen daten zu der versuchsfläche anzeigt...
jetzt sollen in die textboxen neue daten eingetragen und dann in der datenbank gespeichert werden...
das feld versuchs_id ist nur eine spalte in einer tabelle in der datenbank mit dem namen dbo_versuchsfleachen_ST

mikhal 20. Feb 2004 09:35

Re: fehlermeldung in der query...
 
Delphi-Quellcode:
 // Bei dieser if Anweisung springt er dann raus...
   if adoquery1.Locate('Behandlung',tb_behandlung.Text,[])then
       adoquery1.FieldByName('behandlung').AsString;
Steht das wirklich so in deinem Programm?

Ist zwar syntaktisch korrekt, deshalb schmeißt dein Compiler keine Fehlermeldung aber im Programmablauf gibt's dann ein Problem...

Grüße
Mikhal

Sulustaner2004 20. Feb 2004 09:37

Re: fehlermeldung in der query...
 
ja, das steht wirklich so in meinem programm...
und wie gesagt, er macht es ja bei der ersten textbox... :?

Robert_G 20. Feb 2004 10:01

Re: fehlermeldung in der query...
 
Was funktionierte denn hiermit nicht? -> Datenbank über Button beschreiben lassen...
Du läuftst doch schon wieder in einer Schleife durch ein DataSet und änderst über Edit & Post.
Wenn du die Where-Clause, die du für die Schleife benutzt einfach in einem UPDATE verwendest. Dann kannst du alle deine Werte auf einmal und mit einem Bruchteil an Code und Traffic in die DB schreiben (siehe dein anderer Thread in dem Link oben).

Edit: früh-morgendliches-gichtfinger-tipp-syndrom :mrgreen:

mikhal 20. Feb 2004 10:19

Re: fehlermeldung in der query...
 
Delphi-Quellcode:
adoquery1.FieldByName('behandlung').AsString;
Was soll denn das bringen? So wie es jetzt dort steht, suchst du via Locate nach einem Datensatz. Wenn du ihn gefunden hast, liest du ein Feld des Datensatzes aus, ohne es einer Variablen oder einem anderen Datenfeld zuzuweisen (also ein Aufruf einer Funktion, ohne das Ergebnis zu verwenden).

Danach änderst du ALLE Datensätze deiner Datenbank ab dem gefundenen Datensatz auf den Wert, der in der Textbox gefunden wird.
Wenn Locate aber nichts findet, steht der Datenbank-Cursor immer noch an der Position, an der er stand, bevor du Locate aufgerufen hast. Das bedeutet, daß du im schlimmsten Fall wirklich ALLE Datensätze deiner Datenbank anpackst und änderst.

Wenn dein Programm dann im zweiten Schritt bereits bei der IF-Anweisung einen Fehler produziert (du hast immer noch nicht geschrieben, welche Fehlermeldung du erhälst!) dann liegt es wahrscheinlich daran, daß entweder das Feld in der Datenbanktabelle nicht existiert (falsche Schreibweise) oder der Name des Textfeldes falsch ist. Es kann auch sein, daß die Zeichenkette zu lang ist und deshalb nicht in die Datenbank geschrieben werden kann...

Grüße
Mikhal

Sulustaner2004 20. Feb 2004 10:21

Re: fehlermeldung in der query...
 
nun....das problem besteht ja auch darin das ich mit delphi nicht sonderlich bewandert bin... musste mir das was ich bis jetzt kann alles selber beibringen...und das in 2 monaten !! :-)
was mit deiner anweisung nicht funktioniert hat war das er mir incompatible typen angegeben hat... und zwar
[Fehler] versuch2.pas(205): Inkompatible Typen: 'Variant' und 'Tversuch'
und damit kann ich nichts anfangen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 Uhr.
Seite 1 von 5  1 23     Letzte »    

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