Avatar billede fhansen Praktikant
03. november 2008 - 23:36 Der er 17 kommentarer og
1 løsning

Boolean felt i mysql.

Hejsa.

Jeg har lidt problemmer med boolean data i en mysql database.
Jeg ville gerne skrive data med flg. kommando

'SaleData.SaleList.FieldByName('Lock').AsBoolean := False;'

Men det fungere ikke..hvad kan jeg gøre galt.

Hilsen

Finn
Avatar billede arne_v Ekspert
03. november 2008 - 23:38 #1
MySQL har slet ikke en rigtig BOOLEAN data type.

De fleste bruger TINYINT.
Avatar billede vallemanden Nybegynder
03. november 2008 - 23:41 #2
hvilken version af MySQL bruger du?
version 5 har felttype 'boolean'

men ellers gør some arne v siger
Avatar billede arne_v Ekspert
03. november 2008 - 23:45 #3
Faktisk ikke. Nyere versioner af MySQL tillader at man bruger BOOLEAN som synonym
for TINYINT. Men det er stadig et tal. Og kunne sagtens drille.
Avatar billede fhansen Praktikant
04. november 2008 - 09:26 #4
Jamen det er da rigtigt at i mysql er feltet et tinyint, hvis jeg vælger felttypen til at være boolean, ændre mysql typen til tinyint.

Jeg har skal prøvet at bruge 'SaleData.SaleList.FieldByName('Lock').AsInteger := 1;'
uden dette har hjulpet mig, da jeg her får en fejl der siger at jag ikke kan access field Lock as Integer.
Avatar billede hrc Mester
04. november 2008 - 10:15 #5
I erkendelse af at en boolesk værdi er problematisk i mange databaser kan du ligeså godt bare gemme med 1 eller 0. Hvis værdien er 0 er den falsk, alle andre værdier er sande:

  SaleData.SaleList.FieldByName('Lock').AsInteger := 0;
Avatar billede hrc Mester
04. november 2008 - 10:16 #6
I din kode kan du gøre dette:

var
  IsLocked: boolean;
begin
  IsLocked := false;
  SaleData.SaleList.FieldByName('Lock').AsInteger := integer(IsLocked);
  ...
Avatar billede fhansen Praktikant
04. november 2008 - 10:36 #7
nej den giver den samme fejl....
can't access field Lock as integer
Avatar billede arne_v Ekspert
04. november 2008 - 13:02 #8
Må vi se tabel definitionen i MySQL ?

(SHOW CREATE TABLE)
Avatar billede fhansen Praktikant
04. november 2008 - 13:28 #9
Den er her...

CREATE TABLE `my10152`.`salelist` (
`Id` smallint( 6 ) NOT NULL AUTO_INCREMENT ,
`Andel` smallint( 5 ) default NULL ,
`Client` smallint( 6 ) NOT NULL ,
`Berth` varchar( 4 ) COLLATE latin1_danish_ci NOT NULL ,
`Date` date NOT NULL ,
`Sold` date default NULL ,
`Buyer` smallint( 5 ) default '0',
`Lock` tinyint( 1 ) default '0',
`Reg` varchar( 6 ) COLLATE latin1_danish_ci default NULL ,
`Conto` varchar( 16 ) COLLATE latin1_danish_ci default NULL ,
`Value` float NOT NULL ,
`Afgift` float default NULL ,
`Provision` float NOT NULL ,
PRIMARY KEY ( `Id` )
) ENGINE = InnoDB DEFAULT CHARSET = latin1 COLLATE = latin1_danish_ci COMMENT = 'Liste over pladser til salg';
Avatar billede vallemanden Nybegynder
04. november 2008 - 13:37 #10
tror problemmet ligger i at 'Lock' er et reserveret navn i mysql
Avatar billede hrc Mester
04. november 2008 - 14:45 #11
Ahh. Det kan der være noget om (http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html).

Dette link beskriver hvordan en SQL-sætning skal opbygges (http://dev.mysql.com/doc/refman/5.0/en/identifiers.html) - men det kan fhansen ikke gøre her.
Avatar billede arne_v Ekspert
04. november 2008 - 14:53 #12
Det kunne sagtens være det. `` er noget fanden har opfundet. Og det viser sig
i situationer som denne hvor man ikke har direkte kontreol over SQL'en.

NB: Jeg tror iøvrigt at der er nogle GLOAT som skal være DECIMAL(14,2) !
Avatar billede arne_v Ekspert
04. november 2008 - 14:53 #13
FLOAT
Avatar billede fhansen Praktikant
04. november 2008 - 22:38 #14
Se nu virker det efter at jeg har ændret fieldnavnet fra Lock til Locked.
Avatar billede fhansen Praktikant
04. november 2008 - 22:59 #15
Vil gerne dele point ud
Avatar billede vallemanden Nybegynder
05. november 2008 - 09:14 #16
.
Avatar billede fhansen Praktikant
05. november 2008 - 10:33 #17
arne_v er det mine flost felter du tænker på, når du skriver, at nogle float skal være decimal 14,2. Og hvad er fordelen ved at ændre disse felter til decimal
Avatar billede arne_v Ekspert
05. november 2008 - 12:48 #18
Ja.

FLOAT kan give sjove afrundings fejl. Normalt foretrækker man at beløb er eksakte.
Det sikrer DECIMAL.
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