Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Verständnisproblem (https://www.delphipraxis.net/53631-sql-verstaendnisproblem.html)

stonimahoni 20. Sep 2005 11:30

Datenbank: Access • Version: 2000 • Zugriff über: ADO Komponenten

SQL Verständnisproblem
 
Hi Leute...


ich mal mal wieder ein "kleiens" Problem :

ich habe folgende Anweisung :

Delphi-Quellcode:
FormAuftragStat.ADOQueryAuftrStat.SQL.Add('update auftrag set kudienst_mahn1 = ' + datetimetostr(date) + ' where repnr = "' + such_repnr + '"');
nur bekomme ich hier einen Fehler angezeigt...von wegen :

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt xxx.exe ist eine Exception der Klasse EOleException aufgetreten. Meldung: 'Syntaxfehler in Zahl in Abfrageausdruck '20.09.2005''. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------


Was mache ich falsch ???

Vielen Dank.

MFG

Carsten

Sharky 20. Sep 2005 11:38

Re: SQL Verständnisproblem
 
Hai stonimahoni,

ich bin mir jetzt nicht ganz sicher, aber ich glaube mich erinnern zu können das Du bei Access das Datum im Format mm/dd/yyyy übergeben muss?

Grundsätzlich solltest Du das aber immer mit Parametern machen. Dann musst DU dich nicht um das richtige Format kümmern.

Lemmy 20. Sep 2005 11:42

Re: SQL Verständnisproblem
 
versuch mal

Delphi-Quellcode:
FormAuftragStat.ADOQueryAuftrStat.SQL.Add('update auftrag set kudienst_mahn1 = "' + datetimetostr(date) + '" where repnr = "' + such_repnr + '"');
Grüße
Lemmy

stonimahoni 20. Sep 2005 13:15

Re: SQL Verständnisproblem
 
Hi Lemmy...


(am Rande : Kollege von mir wird auch so genannt : Lemmy :D )


soo....nun zum eigentlichen :



wenn ich Deine Anweisung benutze bekomm ich folgendes :


---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt xxx.exe ist eine Exception der Klasse EOleException aufgetreten. Meldung: 'Datentypen in Kriterienausdruck unverträglich'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------



@ Sharky :

ich hatte das vorher mit Parametern... :
Delphi-Quellcode:
.
.
.
FormAuftragStat.ADOQueryAuftrStat.Close;

FormAuftragStat.ADOQueryAuftrStat.SQL.Clear;

FormAuftragStat.ADOQueryAuftrStat.ParamCheck := True;            // Parameter verwenden

FormAuftragStat.ADOQueryAuftrStat.SQL.Add('update auftrag set kudienst_mahn1 = :datum where repnr in (:nummer);');

FormAuftragStat.ADOQueryAuftrStat.Parameters.ParamByName('datum').DataType := ftDate;    // Typ des Parameters ":datum"

FormAuftragStat.ADOQueryAuftrStat.Parameters.ParamByName('datum').Value    := Date;      // Wert zuweisen

FormAuftragStat.ADOQueryAuftrStat.Parameters.ParamByName('nummer').DataType := ftInteger; // Typ des Parameters ":nummer"

FormAuftragStat.ADOQueryAuftrStat.Parameters.ParamByName('nummer').Value   := such_repnr; // Wert zuweisen

FormAuftragStat.ADOQueryAuftrStat.execsql;

das ganze hatte ich in ner Schleife drin :
Delphi-Quellcode:
.
.
.
   such_repnr := '';
   if (FormAuftragStat.DBGridAuftrStatListe.SelectedRows.Count > 0) then
      with FormAuftragStat.DBGridAuftrStatListe.DataSource.DataSet do
      for i:=0 to FormAuftragStat.DBGridAuftrStatListe.SelectedRows.Count-1 do
      begin
         GotoBookmark(pointer(FormAuftragStat.DBGridAuftrStatListe.SelectedRows.Items[i]));
         { die repnr`n werden alle in einen string geschrieben und durch komma getrennt
         und für den sql befehl als bedingung benutzt }
         such_repnr := such_repnr + inttostr(FormAuftragStat.DataSourceAuftrStat.DataSet.FieldByName('Repnr').Value);
         { nach der letzten repnr soll kein komma mehr angehängt werden }
         if (i < (FormAuftragStat.DBGridAuftrStatListe.SelectedRows.Count-1)) then
         such_repnr := such_repnr + ',';

.
.
.
aber hier bekomme ich das folgende Problem :

listenindex überschreitet das maximum (1)


*argh*

irgendwo hänge ich :(





Gruss

Carsten

marabu 20. Sep 2005 13:38

Re: SQL Verständnisproblem
 
Hi Carsten,

der Index-Fehler wird aber nicht von dem gezeigten Code ausgelöst - oder?

Grüße vom marabu

stonimahoni 20. Sep 2005 13:40

Re: SQL Verständnisproblem
 
Hi...

ich nehme an dass der bei der Schleife irgendwas nicht rafft....
wenn ich die Updategeschichte nicht ausführe in der Schleife, kommt der Index Fehler nicht :/


MFg

Carsten

alzaimar 20. Sep 2005 13:49

Re: SQL Verständnisproblem
 
Access-Datumformat geht so:
Delphi-Quellcode:
Function AccessDate (aDate : TDateTime) : String;
Begin
  Result := '#'+formatDateTime ('mm"/"dd"/"yyyy',aDate)+'#'
End;
Verwendung dann ohne Hochkomma, also einfach so:
Delphi-Quellcode:
SQL := 'Select * from Foo Where Date = '+AccessDate(Now);

Union 20. Sep 2005 13:59

Re: SQL Verständnisproblem
 
Zitat:

Zitat von stonimahoni
Hi...

ich nehme an dass der bei der Schleife irgendwas nicht rafft....
wenn ich die Updategeschichte nicht ausführe in der Schleife, kommt der Index Fehler nicht :/


MFg

Carsten

Wenn Du die Eigenschaft SQL eines Queryobjektes änderst, wird dieses sofort geschlossen! Dadurch wird natürlich auch SelectedRows.Count = 0. Du musst zuerst die Bedingung ermitteln und zum schluss das SQL ändern und die Datenmenge erneut öffnen. Ausserdem wäre Dir in dem Fall mit IN besser gedient:

SQL-Code:
update auftrag set kudienst_mahn1 = "' + FormatDateTime('yyyy-mm-dd', date) + '" where repnr in (' + such_repnr + ')'
Und wie bereits erwähnt ist es besser mit Parametern zu arbeiten als mit Stringzusammensetzungen.

smudo 20. Sep 2005 14:20

Re: SQL Verständnisproblem
 
Soweit ich weiß, kommt Access mit Parametern im Datum-Format nicht zurecht.
Daten müssen als String übergeben werden.
Gehts vielleicht mit ' statt mit " ?

MarkusB 20. Sep 2005 20:23

Re: SQL Verständnisproblem
 
Moin stonimahoni!

Also folgender Code (auf die Schnelle gebastelt) funktioniert (auch mit Access):

Delphi-Quellcode:
Query1.SQL.Clear;
Query1.SQL.Add('update Tabelle1 set geburtstag = ''' + DateToStr(now) + ''' where vorname = ''Sven''');
Query1.ExecSQL;
Viele Grüße
Markus
:gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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