Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeit/Datumswert mit einer Tabelle vergleichen (https://www.delphipraxis.net/82045-zeit-datumswert-mit-einer-tabelle-vergleichen.html)

SilverMoonGirl 7. Dez 2006 09:58

Datenbank: Paradox • Version: 9 • Zugriff über: Query

Zeit/Datumswert mit einer Tabelle vergleichen
 
Aloha :hi:

Ich hoffe ich kann euch mein Problem halbwegs verständlich machen...

Ich habe eine Tabelle mit einer Spalte _BackUpTime vom Typ DateTime, deren Inhalt so aussieht
"15:11:45, 17:11:2006"

Dies habe ich jeweils in Zeit und Datum getrennt und zur weiteren Bearbeitung als String umgewandelt.
Jetzt habe ich beide wieder zusammengefügt und wollte sie wieder mit der Datenbank zu vergleichen.

Delphi-Quellcode:
datumzeit:= DBGZeit.SelectedField.AsString + ', '+ DBGdatum.SelectedField.AsString ;
  with DBmodul.QcopyTable do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM Aufdate WHERE AuftragNr = '+DBGrid1.SelectedField.AsString + ' AND
    ("_BackUpTime" = :datzeit)');
    ParamCheck:=true;
    ParamByName('datzeit').AsDateTime:= StrToDateTime(datumzeit);
    Open;
  end;
Wenn ich datumzeit in einen Datums/Zeit typ umwandle bekomme ich eine Fehlermeldung, dass es sich um ein ungültiges Datum handelt. Lass ich datumzeit als String, bekomme ich zwar keine Fehlermeldung aber auch keine Ergebnisse :gruebel:

Ich steh grad ein bisschen auf dem Schlauch ...

shmia 7. Dez 2006 10:33

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Du brauchst auf jeden Fall ein Datumsformat, dass StrToDateTime verarbeiten kann.
Delphi-Quellcode:
// zuerst das Datum dann die Zeit getrennt durch ein Leerzeichen
datumzeit:= DBGdatum.SelectedField.AsString + ' '+ DBGZeit.SelectedField.AsString;

raiguen 7. Dez 2006 10:40

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von SilverMoonGirl
...mein Problem halbwegs verständlich machen...

Ich habe eine Tabelle mit einer Spalte _BackUpTime vom Typ DateTime, deren Inhalt so aussieht
"15:11:45, 17:11:2006"

:roll: Ich kann mir nicht vorstellen, dass ein DateTime-Feld in einer Tabelle so aussieht, aslo Datum und Zeit durch ein Komma getrennt... Sicher, dass der FeldTyp DateTime ist und nicht zufälligerweise ein String?? (nur mal so dumm gefragt...)

Zitat:

Zitat von SilverMoonGirl
Wenn ich datumzeit in einen Datums/Zeit typ umwandle bekomme ich eine Fehlermeldung, dass es sich um ein ungültiges Datum handelt...

Die Fehlermedlung ist ja auch richtig weil das Komma zur Datum-Zeit-Abgrenzung da auch nicht reingehört :!:

mkinzler 7. Dez 2006 11:41

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Wie sehen die Metadaten der Tabelle aus?
BTW. Ein Vergleich von Datumswerten als String ist keine gute Idee.

SilverMoonGirl 7. Dez 2006 12:31

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von raiguen
:roll: Ich kann mir nicht vorstellen, dass ein DateTime-Feld in einer Tabelle so aussieht, aslo Datum und Zeit durch ein Komma getrennt... Sicher, dass der FeldTyp DateTime ist und nicht zufälligerweise ein String?? (nur mal so dumm gefragt...)

Ist aber so und ich bin mir sicher :wink:

Union 7. Dez 2006 12:38

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Wie sieht denn die Variable datumzeit aus, nachdem Du sie zusammengesetzt hast?

SilverMoonGirl 7. Dez 2006 12:44

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Genauso wie der Wert in der Tabelle, also um beim Beispiel von oben zu bleiben, sieht die Variable auch so aus "15:11:45, 17:11:2006"

Union 7. Dez 2006 13:08

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Solange TimeSeparator und DateSeparator gleich sind, wirst Du mit den automatischen Umwandlungsfunktionen (StrTo...) nicht weit kommen. Du müsstest Dir das Datum aus dem String selber zusammenbasteln.

SilverMoonGirl 7. Dez 2006 13:39

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
und was mach ich dann mit dem Komma ... :gruebel:

Union 7. Dez 2006 13:53

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Also auf die harte Tour könnte man es so machen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   datumzeit : string;
   hh, nn, ss, yy, mm, dd : Word;
begin
   //                     1
   //            12345678901234567890
   datumzeit := '15:11:45, 17:11:2006';

   hh := strtoint(copy(datumzeit, 1, 2));
   nn := strtoint(copy(datumzeit, 4, 2));
   ss := strtoint(copy(datumzeit, 7, 2));

   dd := strtoint(copy(datumzeit,11, 2));
   mm := strtoint(copy(datumzeit,14, 2));
   yy := strtoint(copy(datumzeit,17, 4));

   // Das Ergebnis des EncodeDateTime dann in den SQL-Parameter schreiben
   ShowMessage(DateTimeToStr(EncodeDateTime(yy, mm, dd, hh, nn, ss, 0)));
end;

raiguen 7. Dez 2006 14:28

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von SilverMoonGirl
...
Ich habe eine Tabelle mit einer Spalte _BackUpTime vom Typ DateTime, deren Inhalt so aussieht
"15:11:45, 17:11:2006"
...

Sehe jetzt gerade (*sollte mal meine Brille putzen*gg*) dass 1. Datum und Zeit vertauscht sind und 2. der Datumstrenner gleich dem Zeittrenner ist...
Davon mal abgesehen stellt sich mir immer noch die Frage, wie kommt es zu dieser doch merkwürdigen Anzeige? Das Tabellenfeld scheint ja doch vom Typ DateTime zu sein...
Wie hast du den FeldInhalt angezeigt? Mal direkt über die DatenbankOberfläche bzw den DatenbankExplorer oder kommt der gleich aus einer SQL-Abfrage? Ist irgendwo speziell für dieses Feld im FeldEditor (ObjektInspektor!) ein DisplayFormat in der o.a. Form eingegeben??
Mir will es einfach nicht in den Kopf, dass eine 'schnöde' ParadoxTabelle (sorry für den Ausdruck) ein DateTime-Feld so 'verkorkst' darstellt :gruebel: Da muss irgendwo anders noch was gedreht worden sein...

marabu 7. Dez 2006 20:47

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hallo Simone,

vielleicht besser so:

Delphi-Quellcode:
const
  SELECT_STMT
    = 'SELECT * FROM Aufdate A WHERE AuftragNr = :auftrag AND A."_BackupTime" = :datzeit'
    ;
var
  datZeit: TDateTime;
begin
  datZeit := DBGZeit.SelectedField.AsDateTime;
  with DBmodul.QcopyTable do
  begin
    SQL.Text := SELECT_STMT;
    // ParamCheck := True; // Im OI reicht ...
    Params.ParamByName('auftrag').AsInteger := DBGrid1.SelectedField.AsInteger;
    Params.ParamByName('datzeit').AsDateTime:= datZeit;
    Open;
  end;
Gute Nacht

SilverMoonGirl 7. Dez 2006 20:51

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von raiguen
Da muss irgendwo anders noch was gedreht worden sein...

Viel schlimmer, ich bin zu blöd zum abschreiben und habe ein paar Doppelpunkte zuviel gemacht :wall: Und was noch viel schlimmer ist, es ist mir nichmal aufgefallen :|
Richtig wäre eigentlich "15:11:45, 17.11.2006" gewesen.

Sorry, das war echt keine Absicht :wall:

raiguen 7. Dez 2006 21:38

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von SilverMoonGirl
...
Richtig wäre eigentlich "15:11:45, 17.11.2006" gewesen.

Sorry, das war echt keine Absicht :wall:

Passiert jedem irgendwann einmal, grad dann, wenn man eh ein bissl unter Stress steht... also, take it easy...

Trotz alledem muss ich nochmal auf das hier zurückkommen:
Zitat:

Zitat von SilverMoonGirl
...
Ich habe eine Tabelle mit einer Spalte _BackUpTime vom Typ DateTime, deren Inhalt so aussieht
"15:11:45, 17:11:2006"

Dies habe ich jeweils in Zeit und Datum getrennt und zur weiteren Bearbeitung als String umgewandelt.
...

Was mir immer noch nicht in den Kopf will ist diese Art der 'Anzeige' des DateTime-Feldes (mal abgesehen davon, dass der Datumstrenner da nicht korrekt ist) -> hat Paradox 9 neuerdings erst die Zeit und dann das Datum und dann auch noch mit Komma und Leerzeichen getrennt? Dann wäre der Name Paradox im wahrsten Sinne des Wortes zu Recht :P
Und wie hast du diesen merkwürdigen Feldinhalt in einen String reinbekommen, um diesen dann nach Datum und Zeit zu trennen?
Nochmal: hast du dir die Tabelle und speziell das Feld mit der DB-Oberfläche oder ähnlichem Delphi-eigenem Dateibetrachter angeschaut? Steht das da wirklich so drin??? :gruebel:

Sorry, alle bisher gemachten Vorschläge zwecks DatumZeit-'Umwandlung' für die Query können m.E. zu nichts führen (ausser zu Fehlern), weil IMHO irgendetwas mit dem FeldInahlt nicht stimmt :gruebel: :gruebel:

SilverMoonGirl 8. Dez 2006 08:35

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von raiguen
Und wie hast du diesen merkwürdigen Feldinhalt in einen String reinbekommen, um diesen dann nach Datum und Zeit zu trennen?

So:
Delphi-Quellcode:
with DBmodul.Qbackuptime do  
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT Aufdate."_BackUpTime" AS Datum FROM Aufdate WHERE '+ Spaltename+ ' = :zelleNr');
    ParamCheck:= true;
    ParamByName('zelleNr').AsInteger:= StrToInt(Nr);
    Open;
  end;

datumzeit:= dbmodul.Qbackuptime.FieldByName('Datum').AsDateTime;

 with dbmodul.Qdatum do
    begin
      [...]
      FieldByName('Datum').AsString:= DateToStr(datumzeit); //Datum
      FieldByName('Zeit').AsString:= TimeToStr(datumzeit);  //Zeit
      [...]
    end;
Zitat:

Zitat von raiguen
Nochmal: hast du dir die Tabelle und speziell das Feld mit der DB-Oberfläche oder ähnlichem Delphi-eigenem Dateibetrachter angeschaut? Steht das da wirklich so drin??? :gruebel:

Ja habe ich, zu sehen im Anhang

raiguen 8. Dez 2006 09:21

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Besten Dank Simone!
Allerdings komme ich einfach nicht mit dem 'Format' des DateTime-Feldes klar; scheint mir echt ne 'Neuerung' in Paradox 9 zu sein :gruebel:
Wo bzw wie wird überhaupt die BackupTime bzw dieses Tabellenfeld gefüllt??...
Sorry, wenn ich dumme Fragen stelle, aber wie bereit gesagt; ich blick da nicht mehr durch *schulterzuck* :roll:

marabu 8. Dez 2006 09:43

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hi,

wenn das Feld vom Type ftDateTime (@) ist, dann ist mir doch die Darstellung in Paradox 9 egal. Ich bleibe vorerst bei meinem Lösungsansatz aus Beitrag #12.

Freundliche Grüße

raiguen 8. Dez 2006 10:19

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von marabu
Hi,

wenn das Feld vom Type ftDateTime (@) ist, dann ist mir doch die Darstellung in Paradox 9 egal. Ich bleibe vorerst bei meinem Lösungsansatz aus Beitrag #12.

Freundliche Grüße

:wall: na klar! Da hast du völlig Recht! Ich habe mich da durch die merkwürdige Darstellungsart (Anzeige) völlig irritieren lassen und somit auch entsprechend falsche Gedankengänge gehabt! Sorry!

@Simone: ähnliche Irritation ist dir insofern ja auch unterlaufen ;) siehe #1
Code:
datumzeit:= DBGZeit.SelectedField.AsString + ', '+ DBGdatum.SelectedField.AsString ;
So dürfte es dann funktionieren:
Code:
datumzeit:= DBGDatum.SelectedField.AsString + ' ' + DBGZeit.SelectedField.AsString ;
und natürlich das was marabu gesagt hat...

Viel Erfolg!

SilverMoonGirl 11. Dez 2006 14:45

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Also ich hab das jetzt nochmal probiert, aber irgendwas mach ich immer noch falsch :roll:

Jetzt bekomme ich den Fehler zurück, dass die Typen im Ausdruck nicht übereinstimmen. :gruebel:

Delphi-Quellcode:
const
  SELECT_STMT
    = 'SELECT * FROM "[...]\Aufdate" WHERE AuftragNr = :auftrag AND "_BackupTime" = :datzei';

datumzeit:= DBGzeit.SelectedField.AsDateTime + DBGdatum.SelectedField.AsDateTime;

 with DBmodul.QcopyTable do
  begin
    Close;
    SQL.Clear;
    SQL.Text:= SELECT_STMT;
    ParamCheck:=true;
    ParamByName('auftrag').AsInteger := DBGrid1.SelectedField.AsInteger;
    ParamByName('datzei').AsDateTime:= datumzeit;
    Open;
  end;

marabu 11. Dez 2006 14:55

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hallo Simone,

du hast vergessen die Zeile zu markieren, in welcher der Compiler meckert.

Die Zuweisung an SQL.Text macht ein vorheriges SQL.Clear überflüssig. Die Eigenschaft ParamCheck setzt man in der Regel nur einmal und dann im OI.

Freundliche Grüße

SilverMoonGirl 11. Dez 2006 15:09

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hallo,
die beiden Sachen habe ich geändert, und der Compiler meckert beim "Open". Also wird was in der Abfrage nicht stimmen :gruebel:

marabu 11. Dez 2006 15:13

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Wenn du den Fehler nicht selbst findest musst du mal das DDL Statement für die Tabelle zeigen.

hoika 11. Dez 2006 15:18

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hallo,

Dein Feld dattimne ist vom Typ TimeStamp fasst vielleicht nur die beiden Werte zusammen.
Warum machst du das nicht auch so ?

Ich habe mal auf die Schnelle eine Tabelle angelegt.

SQL-Code:
create table test(id integer, dattime timestamp, primary key(id))
insert into test(dattime) values('1.12.2006 12:00:00')
oder Delphi per TTable (ihhh ;))
Delphi-Quellcode:
var
  tdtDate,
  tdtTime : TDateTime;

FieldByName('dattime').AsDateTime:= tdtDate+tdtTime.

Heiko

SilverMoonGirl 12. Dez 2006 12:40

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von marabu
Wenn du den Fehler nicht selbst findest musst du mal das DDL Statement für die Tabelle zeigen.

Muss ich erst gucken, die ist nicht von mir :mrgreen:

@hoika
ich habe es so probiert, allerdings bleibt es trotzdem bei der Fehlermeldung, dass die Typen nicht übereinstimmen :cry:

Das entpuppt sich ja schwerer als erwartet :|

hoika 12. Dez 2006 12:51

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hallo,

dann nimm mal AsFloat statt AsDateTime.


Heiko

SilverMoonGirl 12. Dez 2006 13:24

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Es ändert sich leider trotzdem nichts, die Fehlermeldung ist die gleiche :-(

MacNuke 12. Dez 2006 14:24

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hi.

Ich hab die Datenbank verbrochen, also wenn's um die Datenbank an sich geht, bitte mich fragen. ;) Ja, ich weiß, ich hätte es auch anders machen können (Datum/Zeit getrennt und den "_" bei BackUpTime hätte ich auch weglassen können, aber es sollte halt schnell gehen), aber nun ist zu spät. Sorry, Simone :kiss:

Nunja. Also der Tabellen-Typ ist Paradox 7. Nur damit keine Verwirrung auftritt. Wir arbeiten hier zwar mit Paradox 9, aber das nutzt im Endeffekt auch nur die Tabellen vom 7er.

So. Zum Problem an sich.

Bei jeder Änderung an den Daten werden diese noch mal weggespeichert und mit diesem jenen Zeitstempel versehen, damit man diese identifizieren kann. Nun soll SilverMoonGirl ein Paradox-externes Programm schreiben (jetzt halt in Delphi), welches diese Daten bei Bedarf wieder zurückholen kann. Der Kunde wählt quasi Vorgangsnummer, Datum und Uhrzeit und dann soll sie es raussuchen.

Da gibt's jetzt halt das Problem das die Abfrage nicht funktionieren will.

Von den Delphi-Komponenten hab ich jetzt leider nicht so die Ahnung. Da müsst ihr euch wieder an SilverMoonGirl wenden ;)

Jetzt unabhängig von dem Problem. Wie fragt man denn einen DateTime-Wert richtig ab? Jetzt auch noch unabhängig davon das er erst zusammengesetzt werden muss?

Danke. :)

hoika 12. Dez 2006 14:51

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hallo,

wie ihr beiden seht, gibt es nur Ärger.
Ich würde die Struktur ändern und per Programm-Update,
die alten Daten ersetzen.

Abfrage ist wegen dem zusammengestezten Feld extrem schwierig,
normalerweise kann man eine Date / Time Feld per Extract
(z.B. Extract(Year From DateField)) auseinandernehmen,
das läuft aber ohne Index, ist also saulahm.

Poste doch mal eine Bsp-Tabelle
mit 2/3 Datensätzen.


Heiko

marabu 12. Dez 2006 15:17

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Hallo Leute,

grundsätzlich muss bei der Abfrage über LocalSQL unterschieden werden, ob man per Parameter abfragt oder nicht:

Delphi-Quellcode:
begin
  with Query do
  begin
    SQL.Text := 'SELECT * FROM T1 WHERE ts = :ts';
    Params.ParamByName('ts').AsDateTime := StrToDate('2006-12-21') + StrToTime('12:08:04');
    Open;
  end;

  with Query do
  begin
    SQL.Text := 'SELECT * FROM T1 WHERE CAST(ts AS TIME) = ''12:08:04'' '
              + 'AND CAST(ts AS DATE) = ''21.12.2006'' ';
    Open;
  end;
end;
Die Datum- und Zeit-Literale bei der Parameterbesetzung richten sich nach den Ländereinstellungen des Benutzers. Die Anzeige von von Date- und Time-Feldern über die BDE erfolgt nach den gleichen Regeln, TimeStamp-Felder (@) werden im Format "TIME, DATE" angezeigt. Allerdings müssen die Literale bei der LocalSQL-Abfrage gemäß den Vorgaben der BDE-Konfiguration erfolgen. Diese unterscheidet sich oft von den Systemeinstellungen.

Ansonsten gilt immer noch das, was ich in Beitrag #12 geschrieben habe.

Freundliche Grüße

MacNuke 12. Dez 2006 15:17

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von hoika
wie ihr beiden seht, gibt es nur Ärger.
Ich würde die Struktur ändern und per Programm-Update,
die alten Daten ersetzen.

Nee. Muss doch aus so gehen. Zur Not wird das Programm eher nicht mehr in Delphi gemacht, sondern wieder in Paradox ;) Also von daher ;)

Zitat:

Zitat von hoika
Abfrage ist wegen dem zusammengestezten Feld extrem schwierig,
normalerweise kann man eine Date / Time Feld per Extract
(z.B. Extract(Year From DateField)) auseinandernehmen,
das läuft aber ohne Index, ist also saulahm.

Geschwindigkeit ist eher nebensächlich. Es geht doch im Prinzip nur ganz einfach darum einen DateTime-Wert in einer Tabelle mit einer DateTime-Spalte zu suchen... warum ist das denn so schwer? ;)

Zitat:

Zitat von hoika
Poste doch mal eine Bsp-Tabelle
mit 2/3 Datensätzen.

Ist ne Tabelle mit ner DateTime-Spalte. Der Rest ist so gesehen egal, da sie die anderen Tabellen anders aussehen. Was gleich ist, ist die "_BackUpTime"-Spalte.

@marabu

OK. Dann testen wir es morgen mal mit den BDE-Konfig-Einstellungen (die fassen wir so nie an, sollten also Standard sein).

hoika 12. Dez 2006 17:00

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Tja,

mein Paradox-Wissen wird zum Glück immer kleiner
(wird gerade von FB2.0 aus dem Hirn gedrückt ;))


Heiko

raiguen 12. Dez 2006 20:40

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von MacNuke
Zitat:

Zitat von hoika
wie ihr beiden seht, gibt es nur Ärger.
Ich würde die Struktur ändern und per Programm-Update,
die alten Daten ersetzen.

Nee. Muss doch aus so gehen. Zur Not wird das Programm eher nicht mehr in Delphi gemacht, sondern wieder in Paradox ;) Also von daher ;)
...
Es geht doch im Prinzip nur ganz einfach darum einen DateTime-Wert in einer Tabelle mit einer DateTime-Spalte zu suchen... warum ist das denn so schwer? ;)

Na, denn zeig uns doch mal die Lösung, wenn du schon 'mal eben auf die Schnelle' eine so verkorkste Tabelle erstellst. Hauptsache für deine Zwecke reicht es, dass andere damit evtl. vor unlösbaren Problemen stehen ist ja nebensächlich...

@Silvermoon: leicht veränderte SQL
Delphi-Quellcode:
const
  SELECT_STMT
    = 'SELECT * FROM "[...]\Aufdate" WHERE AuftragNr = :auftrag AND "_BackupTime" = :datzei';

datumzeit:=
 with DBmodul.QcopyTable do
  begin
    Close;
    SQL.Text:= SELECT_STMT;
    ParamByName('auftrag').AsInteger := DBGrid1.SelectedField.AsInteger;
    ParamByName('datzei').AsDateTime:= DBGzeit.SelectedField.AsDateTime + DBGdatum.SelectedField.AsDateTime;
;
    Open;
  end;
Zum Fehler (unterschiedliche Typen im Ausdruck): der könnte ja auch vom ersten Parameter 'auftrag' ausgelöst werden, wenn Auftragsnummer nicht Integer ist!? Um das herauszufinden, änderst halt testweise das SQL.Statement so, dass jeweils nur ein Parameter in der WHERE-Klausel enthalten ist...

MacNuke 12. Dez 2006 21:18

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von raiguen
Na, denn zeig uns doch mal die Lösung, wenn du schon 'mal eben auf die Schnelle' eine so verkorkste Tabelle erstellst. Hauptsache für deine Zwecke reicht es, dass andere damit evtl. vor unlösbaren Problemen stehen ist ja nebensächlich...

Warum so aggressiv?

MacNuke 12. Dez 2006 22:40

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Ich hab mal gerade blind was zusammengeklickt (hab ja halt jetzt nicht die Erfahrung damit)

Also ein DataSource mit einer Query verknüft und das DataSource mit dem GUI-Tabellen-Objekt.

Dann auf nen Schalter, das:
Delphi-Quellcode:
const
  SELECT_STMT
    = 'SELECT * FROM AdrTest A WHERE A."_BackupTime" = :datzeit';
var
  datZeit: TDateTime;
begin
  datZeit := StrToDate('12.12.2006') + StrToTime('22:54:06');;
  with Form1.Query1 do
  begin
    SQL.Text := SELECT_STMT;
    ParamCheck := True;
    Params.ParamByName('datzeit').AsDateTime:= datZeit;
    Open;
  end;
end;
Das hatte jetzt geklappt... naja. Wie gesagt, halt morgen noch mal gucken, woran das jetzt liegen kann. Ist dann wohl doch irgend ne Einstellung. Die BDE hat bei mir hier als Datums-Zeichen ein "/" drinnen. Naja. Mal gucken... ;)

Vllt. kriegt man das ja mit irgendwelchen Datums-Formatierungs-Routinen hin, oder? Also das man Tag, Monat, Jahr, Minute etc. übergibt und er dann den korrekten Wert ausgibt, oder?

edit:
Ist eigentlich schon bekannt, dass das Forum unter OS X ziemlich buggy ist? ;) Der schneidet mir einfach Text weg ;)

mkinzler 13. Dez 2006 05:24

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Ist eigentlich schon bekannt, dass das Forum unter OS X ziemlich buggy ist? Wink Der schneidet mir einfach Text weg Wink
Liegt wohl eher am Browser als am Forum.
Zitat:

Die BDE hat bei mir hier als Datums-Zeichen ein "/" drinnen.
Liegt an den Ländereinstellungen (Datumsformat) des Systems.

MacNuke 13. Dez 2006 07:11

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von mkinzler
Liegt wohl eher am Browser als am Forum.

Hmm... mit Safari passiert, mit FireFox passiert, mit iCab passiert ;)

Nee, am Browser liegt's nicht ;)

Zitat:

Zitat von mkinzler
Liegt an den Ländereinstellungen (Datumsformat) des Systems.

Naja gut. Die sind gleich auf Deutschland gestellt... naja. Mal gucken ;)

SilverMoonGirl 13. Dez 2006 08:46

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von raiguen
Um das herauszufinden, änderst halt testweise das SQL.Statement so, dass jeweils nur ein Parameter in der WHERE-Klausel enthalten ist...

Wenn ich nur die Auftragsnummer abfrage funktioniert es ja auch, nur beim/mit _BackUpTime nicht.

raiguen 13. Dez 2006 10:06

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Zitat:

Zitat von SilverMoonGirl
Wenn ich nur die Auftragsnummer abfrage funktioniert es ja auch, nur beim/mit _BackUpTime nicht.

Okay....
:idea: bzw 'Geistesblitz':
LocalSQL ist ein bischen 'eigensinnig', was 'Sonderzeichen' (und dazu gehört der Unterstrich am Anfang) im Feldnamen angeht: diese MÜSSEN in doppelten Anführungszeichen gesetzt werden - wie du es ja auch insoweit richtig gemacht hast - NUR: es ist dann auch zwingend erforderlich, den Tabellennamen voran zu setzen:
Delphi-Quellcode:
const
  SELECT_STMT
    = 'SELECT * FROM "Aufdate"
       WHERE AuftragNr = :auftrag AND "aufdate"."_BackupTime" = :datzei';
//-- bzw mithilfe eines TabellenAlias:
  SELECT_STMT
    = 'SELECT * FROM "Aufdate" A
       WHERE A.AuftragNr = :auftrag AND A."_BackupTime" = :datzei';

...
So sollte es dann endlich auch mit dem Datum/Zeit-Parameter funktionieren...

SilverMoonGirl 15. Dez 2006 09:47

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Also so langsam geb ich es auf, wenn ich in einem neuenProjekt folgendes ausprobiere, funktioniert alles :gruebel:
Delphi-Quellcode:
var
datumzeit: tdatetime;
begin
  datumzeit:= StrToDate('13.12.2006') + StrToTime('10:28:45');
  with Query1 do
  begin
    Close;
    SQL.Text := 'SELECT * FROM testdatum WHERE dat = :datum';
    ParamByName('datum').AsDateTime:= datumzeit;
    Open;
  end;
end;
in dem Projekt, wo ich es eigentlich brauche funktioniert es nicht. Könnt ihr vielleicht mal gucken, ob ich irgendetwas übersehen habe? :gruebel:

Delphi-Quellcode:
const
  SELECT_STMT
    = 'SELECT * FROM "[...]\Aufdate" WHERE AuftragNr = :auftrag AND "Aufdate"."_BackupTime" = :datzei';

Var
datumzeit: TDateTime;
begin
  datumzeit:= StrToDate(DBGdatum.SelectedField.AsString) + StrToTime(DBGZeit.SelectedField.AsString);

  with DBmodul.QcopyTable do
  begin
    Close;
    SQL.Text:= SELECT_STMT;
    ParamByName('auftrag').AsInteger := DBGrid1.SelectedField.AsInteger;
    ParamByName('datzei').AsDateTime:= datumzeit;
    Open;
  end;
end;
Ich versteh das nicht :wall:

MagicAndre1981 15. Dez 2006 09:49

Re: Zeit/Datumswert mit einer Tabelle vergleichen
 
Aloha Simi,

setz mal den Debugger in Zeile 8 und schau dir mal an, was in den Werten überhaupt drin steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz