Avatar billede flycht Nybegynder
03. december 2004 - 13:12 Der er 13 kommentarer og
1 løsning

sql i TQuery

Jeg har prøvet at skrive følgende, men den returnerer: Type mismatch in expression

SELECT *
FROM interest_table.db
WHERE Dato=30-06-2004

Hvis jeg f.eks. prøver følgende virker det fint
SELECT *
FROM interest_table.db
WHERE ID=2

Skal datoformatet i 'plinger' eller lign. for at det kan virke?
Avatar billede stone Forsker
03. december 2004 - 13:24 #1
er datoformatet sat rigtigt op i mask hvis du bruger en maskedit eller lign..?
Avatar billede flycht Nybegynder
03. december 2004 - 13:50 #2
Er ikke så kompetent i Delphi og slet ikke i SQL. Databasen er fra Paradox 7, hvor typen på datokolonnen er markeret som 'D', hvilket er det almindelige Date format. Jeg har ikke specificeret en maske.
Avatar billede tolderlund Nybegynder
03. december 2004 - 14:06 #3
Du må ALDRIG skrive en dato direkte sådan. Det vil altid gå galt.
Du skal bruge parameter:
SELECT *
FROM interest_table.db
WHERE Dato = :EnDato
Og så sætte parameteren på TQuery:
  Query1.ParamByName('EnDato').AsDate := Date;
Så burde det virke.
Avatar billede flycht Nybegynder
03. december 2004 - 14:33 #4
Hej tolderlund

Det er tættere på at virke end nogensinde før - dvs. jeg får ingen fejl, men mit TDBgrid viser ikke nogen resultater, hvilket det burde gøre. Jeg har skrevet følgende:

Query1.Close;{close the query}
Query1.SQL.Clear;
Query1.SQL.Add ('Select *');
Query1.SQL.Add ('FROM interest_table.db');
Query1.SQL.Add ('WHERE Dato =:30-06-2004');
Query1.ParamByName('30-06-2004').AsDate := Date;
Query1.active:=true;

Er det korrekt skrevet?
Avatar billede kammeyer Nybegynder
03. december 2004 - 14:53 #5
Nej - du skal skrive det han skriver:

Query1.SQL.Add ('WHERE Dato =:EnDato');
Query1.ParamByName('EnDato').AsDate := Date;

Date angiver datoen. Date returnerer en TDateTime - du kan også få en sådan ved at skrive:
var
  Dato: TDateTime;
begin
  Dato := StrToDate('30-06-2004'); // skrives jf. din locale sættings

  Query1.SQL.Add ('WHERE Dato =:EnDato');
  Query1.ParamByName('EnDato').AsDate := Dato; // læg her mærke til Dato - ikke Date som før
Avatar billede kammeyer Nybegynder
03. december 2004 - 14:54 #6
Glemte lige ... Date og StrToDate ligger i SysUtils.
Avatar billede flycht Nybegynder
03. december 2004 - 15:10 #7
Helt perfekt - det virker suverænt.
En lille strøtankte - kunne man komme igennem ved blot at benytte Object Inspectorens SQL String List Editor? Eller skal man kode det?

Ville gerne give point til kammeyer, men det kan jeg åbenbart ikke når kammeyer kun har postet en kommentar...
Avatar billede flycht Nybegynder
03. december 2004 - 15:13 #8
Og hvorfor '=:' istedet for blot '='
Avatar billede kammeyer Nybegynder
04. december 2004 - 01:17 #9
Du kan godt benytte Object Inspectoren til din query, men din dato er dynamisk - den koder du.

:) Det er helt ok, flycht.

:= er en definition man lavede da de udtænkte Pascal i sin tid. = benytter du i sandhedstests (if, while osv).
Avatar billede flycht Nybegynder
04. december 2004 - 02:21 #10
Okey dokey - men der er da forskel på := og =: ! Jeg har altid kun kendt til := og =, men aldrig hørt om =:. Can anyone enlighten me! :-)
Avatar billede delphi Nybegynder
04. december 2004 - 03:16 #11
Parametren hedder :EnDato - Kolon er en del af navnet.

Where Dato = :EnDato 

Er måske mere tydeligt.  Kort fortalt: "Returner rækker, hvor feltet Dato er lig indholdet i parameteren :EnDato"
Avatar billede kammeyer Nybegynder
04. december 2004 - 14:34 #12
ah ok. Det er en del af SQL'en og ikke Pascal.
Avatar billede delphi Nybegynder
04. december 2004 - 15:44 #13
Jo, query parametre er en Delphi feature, som egentligt ikke har noget med SQL at gøre. 
Delphi vil runtimer erstatte ':EnDato' med indholdet i Query1.ParamByName('EnDato') i SQL udtrykket inden det sendes til database driveren.
Avatar billede kammeyer Nybegynder
04. december 2004 - 15:55 #14
Jepper - jeg var lidt for hurtig på aftrækkeren - det jeg ville skrive var blot at det ikke var en del af Pascal syntaksen.

:)
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