Avatar billede iver25 Nybegynder
31. oktober 2001 - 21:52 Der er 24 kommentarer og
1 løsning

SQL sætning

Jeg vil bruge følgende SQL sætning til at finde ud af hvem der er på arbejde på en bestemt dato, på et bestem tidspunkt:

  q.SQL.Add(\'SELECT brugernavn FROM ansat WHERE (dato = #\'+datetostr(dato)+\'#) AND (starttid <= #\'+timetostr(tidspunkt)+\'#) AND (sluttid >= #\'+timetostr(tidspunkt)+\'#)\');


Men det den sender afsted (q.text) er:

SELECT brugernavn FROM ansat WHERE (dato = #01-11-2001#) AND (starttid <= #08?) AND (sluttid => #08?)

Hvordan får jeg den til at skrive (starttid <= #08:00:00#) i stedet for (starttid <= #08?)
Avatar billede morten_s Nybegynder
31. oktober 2001 - 21:59 #1
Du skalnok konvertere via nedenstående
DateTimeToString(Str1,\'hh-nn-ss\',tidspunkt);

og så anvende den nye str1 i dit query
Avatar billede morten_s Nybegynder
31. oktober 2001 - 22:03 #2
Jep det er lige hvad du skal har lige lavet nedenstående test

procedure TForm1.Button1Click(Sender: TObject);
var
  str : String;
begin
  DateTimeToString(Str,\'hh:nn:ss\',Time);
  ShowMessage( Str);
end;

Bemærk du skal have : imellem hh:nn:ss
Avatar billede iver25 Nybegynder
31. oktober 2001 - 22:08 #3
Når jeg skriver hh-mm-ss, så ser det fint ud: (starttid <= #08-00-00#)

Men når jeg skriver hh:mm:ss så ser det sådan her ud (starttid <> #08?)

Hvordan får jeg det samme som den øverste, bare med : i stedet for?
Avatar billede morten_s Nybegynder
31. oktober 2001 - 22:10 #4
Hov du skal skrive hh:nn:ss  mm betyder månede,

ellers prøv at sætte en knap på din form og smid mit lille eksempel ind
Avatar billede iver25 Nybegynder
31. oktober 2001 - 22:14 #5
Jeg har prøvet at skrive hh:nn:ss men jeg får stadig:

(starttid <= #08?)
Avatar billede morten_s Nybegynder
31. oktober 2001 - 22:17 #6
Og hvad type er tidspunkt ?
den skal være TTime eller TDateTime ?
Avatar billede iver25 Nybegynder
31. oktober 2001 - 22:21 #7
Tidspunkt er en TDateTime
Avatar billede morten_s Nybegynder
31. oktober 2001 - 22:28 #8
Ja men nu ser dit udtryk vel sådan her ud nu du må ikke
bruge timetostr længere



  DateTimeToString(Str,\'hh:nn:ss\',Tidspunkt);
  q.SQL.Add(\'SELECT brugernavn FROM ansat WHERE (dato = #\'+datetostr(dato)+\'#) AND (starttid <= #\'+timetostr(tidspunkt)+\'#) AND (sluttid >= #\'+Str+\'#)\');
Avatar billede iver25 Nybegynder
31. oktober 2001 - 22:30 #9
Det gør jeg heller ikke. Jeg skriver sådan her:

  DateTimeToString(tid,\'hh:nn:ss\',tidspunkt);

  q.SQL.Add(\'SELECT brugernavn FROM ansat WHERE (dato = #\'+datetostr(dato)+\'#) AND (starttid <= #\'+tid+\'#) AND (sluttid >= #\'+tid+\'#)\');
Avatar billede morten_s Nybegynder
31. oktober 2001 - 22:42 #10

Prøv lige sådan her

DateTimeToString(tid,\'hh:nn:ss\',tidspunkt);
ShowMessage(tid);
  q.SQL.Add(\'SELECT brugernavn FROM ansat WHERE (dato = #\'+datetostr(dato)+\'#) AND (starttid <= #\'+tid+\'#) AND (sluttid >= #\'+tid+\'#)\');
Avatar billede iver25 Nybegynder
31. oktober 2001 - 22:45 #11
Den showmessage jeg får, skrver tiden fint nok, nemlig: 08:00:00
Avatar billede morten_s Nybegynder
31. oktober 2001 - 22:47 #12
Så prøv sådan her:

  DateTimeToString(tid,\'hh:nn:ss\',tidspunkt);
  q.SQL.Add(\'SELECT brugernavn FROM ansat WHERE (dato = #\'+datetostr(dato)+\'#) AND (starttid <= #\'+tid+\'#) AND (sluttid >= #\'+tid+\'#)\');
ShowMessage(q.sql.text);
Avatar billede iver25 Nybegynder
31. oktober 2001 - 22:50 #13
Det har jeg prøvet. Der får jeg denne tekst:

SELECT brugernavn FROM ansat WHERE (dato = #01-11-2001#) AND (starttid <= #08?) AND (sluttid => #08?)
Avatar billede iver25 Nybegynder
31. oktober 2001 - 22:52 #14
Nej, det passer ikke Undskyld. Jeg troede du mente q.text.

Ved q.SQL.text, ser det sådan her ud:

SELECT brugernavn FROM ansat WHERE (dato = #01-11-2001#) AND (starttid <= #08:00:00#) AND (sluttid => #08:00:00#)
Avatar billede morten_s Nybegynder
31. oktober 2001 - 22:53 #15
Ja men så er det jo lige som det skal være ;-))
Avatar billede iver25 Nybegynder
31. oktober 2001 - 22:56 #16
Nej, får jeg får en fejl, der bl.a . siger:

\"Field \'00:00#\' is of an unknown type\", når jeg gør følgende:

q.open;
Ansat := q.FieldByName(\'brugernavn\').AsString;
Avatar billede morten_s Nybegynder
31. oktober 2001 - 23:03 #17
Og du gør sådan her ?

q.Close;
q.SQL.Text := din streng ovenover
q.Open;
Ansat := q.FieldByName(\'brugernavn\').AsString;

og brugernavn eksistere i din db ?
Avatar billede iver25 Nybegynder
31. oktober 2001 - 23:04 #18
Jeg skriver sådan her:

  q.close;
  q.SQL.Clear;
  q.SQL.Add(\'SELECT brugernavn FROM ansat WHERE (dato = #\'+datetostr(dato)+\'#) AND (starttid <= #\'+tid+\'#) AND (sluttid >= #\'+tid+\'#)\');
  q.open;
  MoedtAnsat := q.FieldByName(\'brugernavn\').AsString;
  q.close;
  q.free;

Og i min ansat tabel, er der en kolonne der hedder \"brugernavn\".
Avatar billede morten_s Nybegynder
31. oktober 2001 - 23:08 #19

Hov hov når du bruger

q.SQL.Add
skal du efterfølgende brug q.ExecSQL;

det er kun nødvendigt til update og insert når du laver select bruger du q.sql.text
Avatar billede iver25 Nybegynder
31. oktober 2001 - 23:13 #20
Jeg får stadig denne fejl:

\"Field \'00:00#\' is of an unknown type\",
Avatar billede morten_s Nybegynder
31. oktober 2001 - 23:14 #21
når du gør sådan her ?

q.Close;
q.SQL.Text := din streng ovenover <---- Bemærk q.sql.text
q.Open;
Ansat := q.FieldByName(\'brugernavn\').AsString;
Avatar billede iver25 Nybegynder
31. oktober 2001 - 23:18 #22
Akkurat samme fejl igen. Jeg skriver det her:

  q.close;
  q.SQL.Clear;
  q.SQL.text := \'SELECT brugernavn FROM ansat WHERE (dato = #\'+datetostr(dato)+\'#) AND (starttid <= #\'+tid+\'#) AND (sluttid >= #\'+tid+\'#)\';
  q.Open;
  Ansat := q.FieldByName(\'brugernavn\').AsString;
  q.close;
  q.free;
Avatar billede hatecaps Nybegynder
04. november 2001 - 17:09 #23
hvorfor i alverden rode rundt med strenge når man kan bruge parametre

q.close;
  q.SQL.Clear;
  q.SQL.text := \'SELECT brugernavn FROM ansat WHERE (dato = :DAT1) AND (starttid <= :TID1) AND (sluttid >= :TID1)\';
  q.parambyname(\'DAT1\').asdate := dato;
  q.parambyname(\'TID1\').astime := tid;
  q.Open;
  Ansat := q.FieldByName(\'brugernavn\').AsString;
  q.close;
  q.free;

virker glimrende

ha\' det godt
hatecaps
Avatar billede iver25 Nybegynder
05. november 2001 - 18:00 #24
Tak for det, det virker bare!
Avatar billede hatecaps Nybegynder
05. november 2001 - 21:36 #25
det var så lidt :-)
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