[Lazarus] Master-Detail in sqldb broken?
Julio César Gázquez
julio at mebamutual.com.ar
Wed Dec 29 14:08:08 CET 2010
Hi all.
I have a master detail form, I'm using SQLDB and running a current
snapshot (Lazarus-0.9.29 rev 28828).
Retrieving data works Ok. Saving changes doesn't. Googling I found old
comments in the mailing list saying primary keys must be integers. Is
yet that the case? If it isn't, component declaration and relevant code
follows.
Another issue, when the master have more than 1 record, if I edit the
detail, then move around in the master, detail changes are lost. IIRC
this works fine in dbExpress. It is a bug or a design limitation of sqldb?
object PQConnection1: TPQConnection
Connected = False
LoginPrompt = False
DatabaseName = 'contabilidad'
KeepConnection = False
Password = 'postgres'
Transaction = SQLTransaction1
UserName = 'postgres'
HostName = '10.0.2.2'
left = 444
top = 12
end
object QueryMaster: TSQLQuery
IndexName = 'DEFAULT_ORDER'
Database = PQConnection1
Transaction = SQLTransaction1
ReadOnly = False
SQL.Strings = (
'SELECT *'
'FROM asientos'
'WHERE numejercicio = 1'
' AND numasiento = 13'
)
Params = <>
left = 445
top = 63
end
object QueryDetail: TSQLQuery
IndexName = 'DEFAULT_ORDER'
Database = PQConnection1
Transaction = SQLTransaction1
ReadOnly = False
SQL.Strings = (
'SELECT *'
'FROM imputacionesasientos'
'WHERE numejercicio = :numejercicio'
' AND numasiento = :numasiento'
'ORDER BY numimputacion'
)
Params = <
item
DataType = ftUnknown
Name = 'numejercicio'
ParamType = ptUnknown
end
item
DataType = ftUnknown
Name = 'numasiento'
ParamType = ptUnknown
end>
DataSource = SourceMaster
left = 444
top = 128
end
object SourceMaster: TDatasource
DataSet = QueryMaster
left = 376
top = 63
end
object SourceDetail: TDatasource
DataSet = QueryDetail
left = 376
top = 128
end
object SQLTransaction1: TSQLTransaction
Active = False
Action = caNone
Database = PQConnection1
left = 376
top = 12
end
procedure TForm1.FormCreate(Sender: TObject);
begin
PQConnection1.Connected:=True;
QueryMaster.Open;
// Parameter property settings seems also broken in the best
dbExpress style!
QueryDetail.Params.ParamByName('numejercicio').DataType:=ftSmallInt;
QueryDetail.Params.ParamByName('numasiento').DataType:=ftLargeInt;
QueryDetail.Open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if QueryMaster.State<>dsBrowse then
QueryMaster.Post;
if QueryDetail.State<>dsBrowse then
QueryDetail.Post;
try
QueryMaster.ApplyUpdates;
QueryDetail.ApplyUpdates;
SQLTransaction1.Commit;
except
SQLTransaction1.Rollback;
raise;
end;
end;
--
Ing. Julio César Gázquez
Mutual de Empleados del Banco
Mitre 923 1º Piso - (S2000COS) Rosario
Tel-Fax: 0341-4265010 411 0533
More information about the Lazarus
mailing list