Avatar billede perfi Nybegynder
23. august 2001 - 11:10 Der er 11 kommentarer og
1 løsning

Dato validering

Jeg har prøvet at stykke noget kode simpelt sammen for at kunne validere på dato, men det fungere ikke.
Kode ser således ud:

DATA->_Q_5->SQL->Clear();
DATA->_Q_5->SQL->Add(\"UPDATE on_model, on_offer\");
DATA->_Q_5->SQL->Add(\"SET ID_state=0\");
DATA->_Q_5->SQL->Add(\"where on_offer_over=:Param1\"); DATA->_Q_5->ParamByName(\"Param1\")->AsDateTime<Dato.DateToStr(Date());
DATA->_Q_5->ExecSQL();

Fejlen siger at den ikke kender \"Param1\"(of unknown type)
on_offer_over og Dato, er af Date-typen.

Måske skal jeg overloade < operatoren ??
Avatar billede tokelil Nybegynder
23. august 2001 - 15:55 #1
Er du sikker på at det er rigtigt at det skal være:
DATA->_Q_5->ParamByName(\"Param1\")->AsDateTime<Dato.DateToStr(Date()); ??

Ville skrive noget i stil med:
DATA->_Q_5->ParamByName(\"Param1\")->AsDateTime = Dato.Date(Date());

Hvis du ligger datoen ind i et felt hvor du bruger AsDateTime, skal du vil ikke forsøge at formattere det til en string via DateToStr.

Avatar billede perfi Nybegynder
25. august 2001 - 12:38 #2
Hej tokelil
Nej, det gør ingen forskel. Der er ikke noget problem i at validere på selve datoen. Det jeg vil er at kunne vælge alle datoer der er mindre end f.eks. dags dato, og opdatere dem med en ny dato eller noget i den dur..
SQL\'en er der ikke problemer med. Men syntaxen i Builderen og det \'damn\' MSaccess er ikke lige at rútte med.
SQL\'en skulle gerne lyde: \"UPDATE liste SET dato=\'24-08-01 WHERE DATO<\'24-08-01\'\";
Men at overføre det til builderen er åbenbart ikke ligetil....
I henhold til at konvertere dato til string...Så har du selvfølgelig ret, men ikke destro mindre validere den på en string, men kun de første 2 positioner i strengen, men det hjælper ikke når den så kommer op med at d. 12-09-01 er mindre end 14-08-01 fordi 14 er større end 12..øhh
Jeg er lidt i tvivl om man benytter ParamByName i dette tilfælde, da Param1 bliver til en enkelt værdi.
DATA->_Q_5->ParamByName(\"Param1\")->AsDateTime = Dato.Date(Date()); bliver til dags dato, men der er ikke på noget tidspunkt der indikere at der skal vælges alle mindre end, derfor var jeg ude i med at erklære mindre end operatoren i selv SQL\'en :
DATA->_Q_5->SQL->Add(\"where on_offer_over<:Param1\");, mewn den virker heller ikke..
Så vi ser om ikke der er en der har en genial løsning eller et hint om hvilken retning man skal gå i...
{Perfi:}
Avatar billede tokelil Nybegynder
25. august 2001 - 17:53 #3
Ved ikke helt om det er noget du kan bruge, men sidst jeg lavede en update til MSAccess brugte jeg ikke Param\'s. (Måske ikke den korrekte måde at gøre det på, men en lille dårlig vane fra ASP)

Lavede det således istedet: (lægger 30 dage til dagsdato)

  TDate tmpDato = Date();
  tmpDato += 30;

  S = \"UPDATE Tabel1 Set Udløber = #\"+ tmpDato +\"# WHERE Medlemsnr = \"+ IntToStr(tmpMedlemsnr) +\";\";
  Query1->SQL->Add(S);
Avatar billede perfi Nybegynder
26. august 2001 - 01:02 #4
Hej igen
Jeg kan godt få dette til at spille:
String S = \"UPDATE model, on_offer SET ID_state=0 WHERE ID_state=1 and (((on_offer_over)<#19-08-01# ))\";
DATA->_Q_5->SQL->Add(S);
DATA->_Q_5->ExecSQL();

SÅ - HVORFOR i helvedet kan dette så ikke fungere:
TDate TD_dato=Date();
String S = \"UPDATE model, on_offer SET ID_state=0 WHERE ID_state=1 and (((on_offer_over)<\\\"\"+TD_dato+2\\\"))\";
DATA->_Q_5->SQL->Add(S);
DATA->_Q_5->ExecSQL();
Ja, jeg spørger bare.....
perfi:
Avatar billede perfi Nybegynder
26. august 2001 - 01:03 #5
Ja, se lige bort fra det 2 tal inde i SQL\'en..
Perfi:
Avatar billede tokelil Nybegynder
26. august 2001 - 02:52 #6
Du skal vel bruge # omkring datoer når du arbejder med Access... måske...
altså:
String S = \"UPDATE model, on_offer SET ID_state=0 WHERE ID_state=1 and (((on_offer_over)<#\" + TD_dato + \"#))\";
Avatar billede perfi Nybegynder
26. august 2001 - 13:54 #7
tokelil<<
Lige så snart man putter en variabel inde i SQL strengen, så opdatere den bare alle hvor ID_state er lig med=0.
(((on_offer_over)<#24-08-01#))\"; \"ER FUCKET\"
(((on_offer_over)<#\" + TD_dato + \"#))\"; \"ER IORDEN\".
HVAD SKER DER......
Jeg må nok hellere snart tælle til 10, hvis det ikke skal gå ud over min kone...
JEG SÆTTER 100 point xtra på højkant, til den engel der kan løse dette problem. Uden at glemme TOKELIL, som har bidraget...
PERFI:

Avatar billede perfi Nybegynder
26. august 2001 - 13:56 #8
DET VAR SELVFØLGELIG LIGE OMVENDT
(((on_offer_over)<#24-08-01#))\"; \"ER IORDEN\"
(((on_offer_over)<#\" + TD_dato + \"#))\"; \"ER FUCKET\".
PERFI:
Avatar billede tokelil Nybegynder
26. august 2001 - 14:30 #9
Er sku da underligt!!!
Hvis man udskriver din SQL streng efter at du har indsat variablen med dato, giver det vel det samme som hvis du \"hardcoder\" din SQL. ?
Kan det være din TD_dato der på en eller anden ikke fungerer rigtigt ? Måske noget omkring dansk/amerikansk dato format? (Et skud... Giver mig altid problemer i ASP)
Avatar billede perfi Nybegynder
26. august 2001 - 22:14 #10
Nå, men jeg fandt selv ud af det og det var milevis væk fra det vi var ude i...Men tokelil det med amerikansk/dansk dato format var lidt af det rigtige. Her kommer den som virker:
mm=Edit2->Text.SubString(4,2);
dd=Edit2->Text.SubString(1,2);
if(Edit2->Text.SubString(4,1)==0)
mm=Edit2->Text.SubString(5,1);
yy=Edit2->Text.SubString(7,2);
TD_dato=mm+\"/\"+dd+\"/20\"+yy;
DATA->Query5->SQL->Clear();
String S = \"UPDATE model, on_offer SET model.ID_state = 0 WHERE (((model.ID_state)=1) AND ((model.ID_pics)=[on_offer].[offer_id]) AND ((on_offer.on_offer_over)<#\"+TD_dato+\"#))\";
DATA->Query5->SQL->Add(S);
    try
    {
    DATA->Query5->ExecSQL();
    Panel18->Show();
    }
    catch(...)
    {
    Panel15->Show();
    }
Som ses måtte jeg konvertere strengen om....
Så jeg deler pointene op 30 til mig selv og 30 til tokelil
Avatar billede perfi Nybegynder
26. august 2001 - 22:15 #11
Nå, men igen er du ikke så god til at svarer, men istedet kommentere, så du får de 30 point næstegang tokelil
PERFI:
Avatar billede tokelil Nybegynder
26. august 2001 - 22:57 #12
Agh.. hader når man er nød til at lave den slags konverteringer! Anyway, tak for de kommende point ! ;-)
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
Kategori
Kurser inden for grundlæggende programmering

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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Lead DevSecOps

Netcompany A/S

Test Consultant

Politiets Efterretningstjeneste

Tech lead for AI og machine learning i PET