Probleme Firebird et DBExpress de DELPHI XE3
Bonjour tout le monde;
J'ai un problème avec les requêtes qui utilisent des champs float d'une base de données Firebird.
J'utilise Firebird 2.5, Delphi XE3 (les composant DBExpress).
Si je fait un cast des champs float en numéric ça marche, sinon, j'ai un message "Opération non applicable".
J'avais les même requêtes sous Firebird 2.5 et Delphi 2009 et ça marchait très bien.
Est ce qu'il existe une solution à ce problème?
Solution de contournement
Bonsoir tout le monde;
Je me suis retrouvé obligé de convertir mes champs de types Float en types Deciaml(15,3).
Pour cela et pour faciliter la tâche, j'ai utiliser cette méthode :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
IBQuery2.Close;
IBQuery2.SQL.Clear;
IBQuery2.SQL.add('SELECT trim(RF.RDB$RELATION_NAME) as table_name, TRIM(RF.RDB$FIELD_NAME) FIELD_NAME FROM RDB$RELATION_FIELDS RF '
+' JOIN RDB$FIELDS F ON (F.RDB$FIELD_NAME = RF.RDB$FIELD_SOURCE) '
+' WHERE (COALESCE(RF.RDB$SYSTEM_FLAG, 0) = 0) and F.RDB$FIELD_TYPE = 10');
IBQuery2.open;
IBQuery2.First;
while not IBQuery2.Eof do
begin
execute_query('alter table '+IBQuery2['table_name']+' add vv DECIMAL(15,3)');
execute_query('update '+IBQuery2['table_name']+' set vv = '+IbQuery2['FIELD_NAME']);
execute_query('alter table '+IBQuery2['table_name']+' drop '+IbQuery2['FIELD_NAME']);
execute_query('alter table '+IBQuery2['table_name']+' alter vv to '+IbQuery2['FIELD_NAME']);
IBQuery2.Next;
end;
IBQuery2.close; |
avec
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
procedure execute_query(cmd:string);
begin
try
if not IBDatabase1.Connected then IBDatabase1.Open;
IF IBTransaction1.InTransaction Then IBTransaction1.Commit;
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.add(cmd);
IBTransaction1.StartTransaction;
IBQuery1.ExecSQL;
IBTransaction1.Commit;
Except
end;
IBQuery1.Close;
end; |