21. maj 2001 - 14:29Der er
21 kommentarer og 1 løsning
Syntaks i datofelter
Jeg har oprettet en Pardoxtabel hvor i indgår et felt af typen date.
Når jeg tilskriver feltet foregår det på følgende måde:
FieldByName(\'Dato\').AsDateTime := Date; Når jeg ser i tabellen med Database desktop er datoer efter 2000 angivet på følgende måde 22-10-00 og før 2000 på følgende måde 22-10-1999
Problemet opstår når jeg skal lave et dataudtræk det gør jeg med feks. følgende syntaks Form1.Query1.SQL.Text :=\' ( Dato > \'\' 17-11-1999 \'\' )\'
Vælg dit Tquery komponent og flyt markøren til property editoren til feltet Params og tryk på F1. Dels hjælpen og dels eksemplet forklarer hvordan du sætter det op.
Den plejer godt at kunne konvertere en tekst til en date \"on the fly\", så det ikke er nødvendigt at bruge params. Hvis den ikke vil kan du evt. bruge Cast.
Og ja du kan godt bruge
shortdateformat := \'dd-mm-yyyy\';
men sæt den tilbage igen når dit program lukkes, det er det pæneste.
Lige en sidste ting: Datoen i din paradox tabel er i et datefelt blot en float. At den vises kun med 2 cifre for årstallet i dbexplorer eller database desktop skyldes indstillingerne for datoformatet på dinmaskine. I kontrolpanel, nationale indstillinger kan du angive at årstal skal vises med 4-cifre ved at tilføje 2 ÅÅ til angivelsen under det viste datoformat.
Martinlind, LocalSQL som Delphi benytter til Paradox og Dbase tabeller accepterer ikke konvertering \"on the fly\". Der skal man bruge params, men der er forskel på hvordan disse kan oprettes if hhv. D4 og D5, hvis man opretter og sletter dem igen umiddelbart før og efter et SQL kald. Hvis du bruger params i property er det det samme.
Converts specified value to the specified data type.
CAST(column_reference AS data_type)
Description
Use CAST to convert the value in the specified column to the data type specified. CAST can also be applied to literal and calculated values. CAST can be used in the columns list of a SELECT statement, in the predicate for a WHERE clause, or to modify the update atom of an UPDATE statement.
The Data_Type parameter may be one of most column data type applicable to the table type used: CHAR, INTEGER, NUMERIC, and so on. Certain column types cannot be used as the source or target data types: BLOB, MEMO, and BYTES.
The statement below converts a Paradox TIMESTAMP column value to DATE.
SELECT CAST(SaleDate AS DATE)
FROM ORDERS
Converting a column value with CAST allows use of other functions or predicates on an otherwise incompatible data type, such as using the SUBSTRING function on a DATE column.
SELECT SaleDate,
SUBSTRING(CAST(CAST(SaleDate AS DATE) AS CHAR(10)) FROM 1 FOR 1)
FROM Orders
When applied to retrieved data of a SELECT statement, the effect is transient and does not affect stored data. When applied to the update atoms of an UPDATE statement, the effect is persistent and permanently converts the case of the stored values.
Note: the CAST function cannot be used with memo or BLOB columns.
Her var det feltet 2FraDato\" den ikke kunne lide :
Form1.Query1.SQL.Text := \'SELECT *FROM DB \'+ \' WHERE Dato < CAST(FraDato AS DATE) \';
-----------------------
Skal skrives sådan :
Form1.QueryAlarm.SQL.Text := \'SELECT *FROM AlDB \'+ \' WHERE Dato < CAST (\'1199-11-11\' AS DATE)\';
Husk det er enkelt \' du skal bruge, dvs hvis det skal være i delphi kode så skal du skrive din streng sådan at delphi acceptere \' det er noget med du skal op på tre for at få en ud : strx := \'sla\'+\'\'\'+\'m\';
Form1.QueryAlarm.SQL.Text := \'SELECT *FROM AlDB \'+ \' WHERE Dato < CAST (\'1199-11-11\' AS DATE)\';
Kan ikke compileres, compiler melder om unterminated string, det kan det neden under og jeg har checket strengen den oversættes så vidt jeg kan se til Cast \'1999-11-11\' as date
Form1.QueryAlarm.SQL.Text := \'SELECT *FROM AlDB \'+ \' WHERE Dato < CAST (\'\'11-11-1999 \'\' AS DATE) \';
Dette udtryk kan kompileres men giver fejl ved kørsel ??
Som jeg forsøgte at skrive skal du bruge tre \' når du skal have det ud midt i en streng, men hvis du går ind og sætter din delphi editor op til at tegne dine strenge i en anden farve end sort så kan du tydeligt se når delphi synes din streng er ok og hvor lang den synes den er, så gør det, og kig så på dit udtryk igen så kan du se problemet.
/Martin
Synes godt om
Ny brugerNybegynder
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.