![]() |
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:
nur bekomme ich hier einen Fehler angezeigt...von wegen :
FormAuftragStat.ADOQueryAuftrStat.SQL.Add('update auftrag set kudienst_mahn1 = ' + datetimetostr(date) + ' where repnr = "' + such_repnr + '"');
--------------------------- 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 |
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. |
Re: SQL Verständnisproblem
versuch mal
Delphi-Quellcode:
Grüße
FormAuftragStat.ADOQueryAuftrStat.SQL.Add('update auftrag set kudienst_mahn1 = "' + datetimetostr(date) + '" where repnr = "' + such_repnr + '"');
Lemmy |
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:
aber hier bekomme ich das folgende Problem :
.
. . 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 + ','; . . . listenindex überschreitet das maximum (1) *argh* irgendwo hänge ich :( Gruss Carsten |
Re: SQL Verständnisproblem
Hi Carsten,
der Index-Fehler wird aber nicht von dem gezeigten Code ausgelöst - oder? Grüße vom marabu |
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 |
Re: SQL Verständnisproblem
Access-Datumformat geht so:
Delphi-Quellcode:
Verwendung dann ohne Hochkomma, also einfach so:
Function AccessDate (aDate : TDateTime) : String;
Begin Result := '#'+formatDateTime ('mm"/"dd"/"yyyy',aDate)+'#' End;
Delphi-Quellcode:
SQL := 'Select * from Foo Where Date = '+AccessDate(Now);
|
Re: SQL Verständnisproblem
Zitat:
SQL-Code:
Und wie bereits erwähnt ist es besser mit Parametern zu arbeiten als mit Stringzusammensetzungen.
update auftrag set kudienst_mahn1 = "' + FormatDateTime('yyyy-mm-dd', date) + '" where repnr in (' + such_repnr + ')'
|
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 " ? |
Re: SQL Verständnisproblem
Moin stonimahoni!
Also folgender Code (auf die Schnelle gebastelt) funktioniert (auch mit Access):
Delphi-Quellcode:
Viele Grüße
Query1.SQL.Clear;
Query1.SQL.Add('update Tabelle1 set geburtstag = ''' + DateToStr(now) + ''' where vorname = ''Sven'''); Query1.ExecSQL; Markus :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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 by Thomas Breitkreuz