AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

überfordert ~.~

Ein Thema von Anfänger2013 · begonnen am 8. Apr 2013 · letzter Beitrag vom 14. Apr 2013
Antwort Antwort
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: überfordert ~.~

  Alt 9. Apr 2013, 15:07
Hallo Sergej,
bin auch gerade mal über dein Programm drübergeflogen. Mir sind einige Dinge aufgefallen, die auch die Stabilität des Programms in Frage stellen könnten. Du benutzt z.B. als Name deines TPageControl das Wort "register". Register ist allerdings in Delphi ein reservierter Begriff und im falschen Kontext durchaus auch falsch zu verstehen.
Des Weiteren schließe ich, bevor ich einer Query einen neuen SQL.Text zuweise, immer zuerst die Query, weiße dann den String zu und öffne sie dann erst wieder.

Das hier:
Delphi-Quellcode:
For zeile := 1 to 20 DO //Zeilen im DBGrid hochzaehlen
      begin
       with DBGrid1.DataSource.DataSet do
         begin
          RecNo := Zeile;
          s:= Fields[spalte-1].AsString;
         end;
         b:=strtoint(s);
      end;
solltest du vielleicht in eine
Delphi-Quellcode:
while NOT ADOQuery_Buchen2.EOF do begin
...
  ADOQuery_Buchen2.Next;
end;
Schleife verpacken. Somit kannst du sicher sein, dass immer alle Datensätze ausgelesen werden. Sollten mal weniger DS in der DB vorhanden sein, wird dir dein Programm einen Fehler melden. Sind mehr drin, werden diese nicht ausgelesen.

Die Daten solltest du wie auch schon von "nahpets" beschrieben, direkt vergleichen und nicht erst in einen String umwandeln. Des Weiteren übergibst du bei deinem SQL-Statement die Daten in Form eines Strings. In der DB ist das Feld aber als DateTime Feld angelegt. Warum sind die "#"-Zeichen vor und hinter dem jeweiligen Datum angebracht? Sollten das Hochkommata " ' " sein? Wenn ja, schau dir bitte mal die Funktion QuotedStr() an. Die erledigt genau das. Wobei das in diesem Fall nicht benutzt werden soll. DateTime Werte können direkt an eine DB per SQL-Statement übergeben werden.

Zu deinem Problem mit dem Einfügen in die Datenbank beim Klick auf "Buchen".
Ein Hinweis noch wenn ihr mir den erlauben darf. Lagere doch Speicherprozeduren aus und durchlaufe nicht alles im OnButtonClick Event. Das kann dir auch beim Finden deiner Fehler helfen.

Das Hinzufügen der Werte in die DB musst zu nicht zwingend über das "INSERT INTO" Statement machen. Du kannst über deine ADOQuery_Buchen auch in etwa so etwas machen:

Delphi-Quellcode:
with ADOQuery_Buchen do begin
  Append;
  FieldByName('Pass_Nr').AsInteger := NaechtePassNr;
  FieldByName('Zimmer_Nr').AsInteger := ZimmerNr;
  ...
  Post;
end;
Alternativ zu FieldByName() kannst du auch Fields[I] benutzen. Bei C ist Fields[I] zumindest als schneller angegeben. Wie es bei Delphi aussieht weiß ich nicht genau.
Wenn du das Eintragen in die DB per "INSERT INTO" machen willst, dann sag nochmal bescheid. Dann müssen wir uns dein SQL-Statement mal genauer ansehen.
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: überfordert ~.~

  Alt 9. Apr 2013, 15:34
Zitat:
anreise:=(DatetoStr(bu_anreise.Date));
abreise:=(DatetoStr(bu_abreise.Date));

if (anreise >= abreise) then
Hierbei werden die Datum-Angaben jeweils in Strings des Formates TT/MM/JJJJ gewandelt und so verglichen.
Datum-String-Vergleiche sollte man aber immer im Format JJJJ/MM/TT durchführen, andernfalls ist der 02/04/2013 kleiner als der 31/03/2013.
Hartmut
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: überfordert ~.~

  Alt 9. Apr 2013, 15:36
Wieso eigentlich Datumswerte als String vergleichen statt gleich als TDate(Time)?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: überfordert ~.~

  Alt 9. Apr 2013, 15:40
Dazu hat er etwas gesagt

Ich hab auch ein Teil des Quelltextes als Kommentar gesetzt, da ich zu Hause mit Turbo Delphi und in der Schule mit Delphi 6 arbeite. Bsp. das Datum dass ich benutze ...in Turbo Delphi klappt es ganz normal und Delphi 6 muss ich es erst zwerlegen und dann wieder zusammenfügen und wenn ich die Version von Delphi 6 zu Hause mache, dann gehts nicht.
Hartmut
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: überfordert ~.~

  Alt 9. Apr 2013, 15:45
Hallo,
Dazu hat er etwas gesagt

Ich hab auch ein Teil des Quelltextes als Kommentar gesetzt, da ich zu Hause mit Turbo Delphi und in der Schule mit Delphi 6 arbeite. Bsp. das Datum dass ich benutze ...in Turbo Delphi klappt es ganz normal und Delphi 6 muss ich es erst zwerlegen und dann wieder zusammenfügen und wenn ich die Version von Delphi 6 zu Hause mache, dann gehts nicht.
wenn ich mich recht erinnere, habe ich Datumswerte schon vor Delphi 6 miteinander vergleichen können, da muss irgendwo noch ein andere Haken sein.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: überfordert ~.~

  Alt 9. Apr 2013, 15:46
Er zerlegt aber den String und nicht das Datum. Ein TDateTime ist vom Typ double, IIRC ist das schon seit Delphi 1 so, das kann nichts mit der Delphi-Version zu tun haben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: überfordert ~.~

  Alt 9. Apr 2013, 15:53
Er zerlegt aber den String und nicht das Datum. Ein TDateTime ist vom Typ double, IIRC ist das schon seit Delphi 1 so, das kann nichts mit der Delphi-Version zu tun haben.
Er erstellt aus dem Datum jeweils einen String DD/MM/YYYY , vergleicht diese Strings miteinander (im DD/MM/YYYY-Format, das klappt nur wenn beide Jahr und Monat gleich haben), danach macht er aus den Strings wieder Datum-Angaben.

DateToStr benutzt Formateinstellungen, die können (wenn nicht angegeben) unterschiedlich sein, z.B. DD/MM/YYYY oder die englische Version MM/DD/YYYY. Auch der Separator "/" kann unterschiedlich sein , z.B. "." oder "-".

Zitat:
procedure TForm2.Button1Click(Sender: TObject);
var zeile, spalte: integer;
begin
spalte := 1;
//Datum des DateTimePicker auf Variablen legen
anreise:=(DatetoStr(bu_anreise.Date));
abreise:=(DatetoStr(bu_abreise.Date));

if (anreise >= abreise) then
begin
Showmessage('Buchung nich möglich. Bitte überprüfen Sie das Datum.');
end
else
begin
{
DD:=copy(anreise,1,2); //auf DD den Tag des Monats legen
delete(anreise,1,3); // Tag des Monats und den dazugehцrigen Punkt lцschen

MM:=copy(anreise,1,2); //auf MM den Monat legen
delete(anreise,1,3); //den Monat und den dazugehцrigen Punkt lцschen

JJ:=copy(anreise,1,4); //auf JJ das Jahr legen

anreise:=DD+'/'+MM+'/'+JJ; //auf anreise Tag, Monat und Jahr legen und
//diese mit / als Trenzeichen versehen

DD:=copy(abreise,1,2); //auf DD den Tag des Monats legen
delete(abreise,1,3); // Tag des Monats und den dazugehцrigen Punkt lцschen

MM:=copy(abreise,1,2); //auf MM den Monat legen
delete(abreise,1,3); //den Monat und den dazugehцrigen Punkt lцschen

JJ:=copy(abreise,1,4); //auf JJ das Jahr legen

abreise:=DD+'/'+MM+'/'+JJ; //auf abreise Tag, Monat und Jahr legen und
//diese mit / als Trenzeichen versehen
}

//ANFRAGE: die Zimmer sollen ausgegeben werden die
// im angegebenen Zeitraum belegt sind
Hartmut

Geändert von kwhk ( 9. Apr 2013 um 15:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#8

AW: überfordert ~.~

  Alt 9. Apr 2013, 15:54
Genau. Weshalb?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort

 

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