Avatar billede skindbeni Nybegynder
18. februar 2010 - 23:26 Der er 11 kommentarer og
1 løsning

Delphi, indsætte SQL med datoer

Davs.

Jeg forsøger manuelt at indsætte en post i min database med komponenten TIBSQL.

Jeg har brugt nedenstående procedure

---

procedure TfrmOpretNy.btnOKClick(Sender: TObject);
var
  Aar : string[50];
  Primo, Ultimo: TDate;
begin
  Aar := edtAar.Text;
  Primo := strToDate(edtPrimo.Text);
  Ultimo := strToDate(edtUltimo.Text);
  IBSQL1.Close;
  IBSQL1.SQL.Clear;
  IBSQL1.SQL.Text := 'INSERT INTO regnskabsaar VALUES (0, '''+Aar+''', '+DateToSTr(Primo)+', '+DateToSTr(Ultimo)+', ''Åben'')';
  IBSQL1.ExecQuery;
end;

Kan I umiddelbart se en fejl i ovenståendekode. Jeg har nørklet lidt frem og tilbage, hvor jeg har fået diverse exceptions, som jeg løbende har tilrettet indtil ovenstående kode, hvor jeg nu får en exception, som jeg ikke kan gennemskue.

"Conversio error from string "-2010"

I ovenstående exception har jeg indtastet "01-01-2010" som eksempel i edtPrimo.

Vælger jeg at skrive "01-01-1999" bliver exceptionen: "Conversio error from string "-1980" og vælger jeg at skrive "01-01-10" bliver exceptionen ligeledes som i første eksempel "Conversio error from string "-2010"

Findes der i øvrigt et godt sted på nettet, hvor der beskrives, hvordan man arbejder med datoer i Delphi. Jeg tænker, om man kan komme ud for problemer omkring datoformater, punktummer, bindestreger m.v. samt hvordan man validerer datoer, beregner hvilken dato der kommer først og om en dato kommer LIGE efter en anden.
Avatar billede arne_v Ekspert
19. februar 2010 - 02:20 #1
Prøv med formatet:

yyyy-mm-dd
Avatar billede arne_v Ekspert
19. februar 2010 - 02:23 #2
Men den rigtige løsning må være at bruge parameters !!
Avatar billede mortvader Nybegynder
19. februar 2010 - 14:38 #3
Skal der ikke bare en "pling" på hver side?

  IBSQL1.SQL.Text := 'INSERT INTO regnskabsaar VALUES (0, '''+Aar+''', '''+DateToSTr(Primo)+''', '''+DateToSTr(Ultimo)+''', ''Åben'')';
Avatar billede skindbeni Nybegynder
19. februar 2010 - 22:11 #4
Mit problem er desværre endnu ikke løst.

Arne: IBSQL og IBDataset har ingen PARAM property som IBQuery (så vidt jeg lige kan se).

Jeg har overvejet at bruge IBQuery i stedet, men ahr forgæves googlet efter dokumentation og tutorials på, hvordan jeg kan bruge det. HAr du et godt link?

mortvader: Det gav ingen effekt at ændre til din kode. JEg skal ikke kunne sige hvorfor.
Avatar billede arne_v Ekspert
19. februar 2010 - 23:27 #5
Prøvede du forslaget i #1?
Avatar billede skindbeni Nybegynder
20. februar 2010 - 00:48 #6
Arne: Ja, det går formentligt galt i min fejlagtige og mangelnde brug af parametre, som jeg ikke kan finde?
Avatar billede skindbeni Nybegynder
20. februar 2010 - 15:53 #7
Jeg har fundet en løsning. Ellers tak.
Avatar billede mortvader Nybegynder
20. februar 2010 - 15:59 #8
Hvad var løsningen?
Avatar billede arne_v Ekspert
20. februar 2010 - 15:59 #9
Skriv endelig løsningen af hensyn til andre.
Avatar billede skindbeni Nybegynder
20. februar 2010 - 16:03 #10
Jeg har ikke fundet løsningEN, men fundet EN løsning :)

HAr valgt at ænde hele problemstillingen, vælge andre komponenter til at kalde tildatabasen osv, så ovenstående forudsætninger for problemet holder ikke længere. :o)
Avatar billede skindbeni Nybegynder
20. februar 2010 - 16:04 #11
og i faretn glemte jeg at skrive, hvad det så var, jeg havde gjort.

I stedet for at lave indtastningsfelter, hvis indhold bliver integeret i min SQL insert sætning, så har jeg valgt at indsætte en linie og derefter tilknytte DataAware komponenter til og skrive til posten efter indsættelse i stedet for før. Håber det gav mening.
Avatar billede fhansen Praktikant
30. marts 2010 - 10:04 #12
Jeg har haft samme problem, og har løst det på denne måde, jeg er begyndt at bruge QuotedStr(), da jeg synes at "" har drillet mig mange gange.

DateTimeToString(Date2,'yyyy-mm-dd',Tcal.Date);
SQL.Text :='Insert INTO rental (Client, Fdate, Tdate, Slip) '+
'VALUES ('+quotedStr(ClientSql.FieldByName('Nummer').AsString)+','+quotedStr(Date1)+','+quotedStr(Date2)+','+quotedStr(RentMainFrame1.RentFrame12.Slip.Text)+')';
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester