AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Verständnisproblem
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Verständnisproblem

Ein Thema von stonimahoni · begonnen am 20. Sep 2005 · letzter Beitrag vom 20. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#1

SQL Verständnisproblem

  Alt 20. Sep 2005, 12:30
Datenbank: Access • Version: 2000 • Zugriff über: ADO Komponenten
Hi Leute...


ich mal mal wieder ein "kleiens" Problem :

ich habe folgende Anweisung :

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
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 12:38
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 12:42
versuch mal

FormAuftragStat.ADOQueryAuftrStat.SQL.Add('update auftrag set kudienst_mahn1 = "' + datetimetostr(date) + '" where repnr = "' + such_repnr + '"'); Grüße
Lemmy
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#4

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 14:15
Hi Lemmy...


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


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
Carsten
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 14:38
Hi Carsten,

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

Grüße vom marabu
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#6

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 14:40
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
Carsten
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 14:49
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:
SQL := 'Select * from Foo Where Date = '+AccessDate(Now);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 14:59
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:

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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#9

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 15:20
Soweit ich weiß, kommt Access mit Parametern im Datum-Format nicht zurecht.
Daten müssen als String übergeben werden.
Gehts vielleicht mit ' statt mit " ?
  Mit Zitat antworten Zitat
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#10

Re: SQL Verständnisproblem

  Alt 20. Sep 2005, 21:23
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
  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 22:01 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