Thema: Delphi überfordert ~.~

Einzelnen Beitrag anzeigen

Aviator

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

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