i'm searching an example how to save data from listview into database.
i have a listview with some data:
and database mysql:
ID, name, position, sall, date
can someone show me an example how to do this?
thx.
i'm searching an example how to save data from listview into database.
i have a listview with some data:
and database mysql:
ID, name, position, sall, date
can someone show me an example how to do this?
thx.
Don't know if TUNIQuery has ExecSql method but this will work with TADOQuery, in my case the ListView.ViewStyle is set to vsReport and it contains 4 cols.
I think if you use a StringGrid or a Dbgrid will be much easier to handel
procedure TForm1.PostData;
const
SQLCMD = 'INSERT INTO MYTABLE (NAME, POSITION, SALL, DATE) VALUES '+
'(%s, %s, %s, %s)';
var
// IL: TListItem;
I, J, ItemsCount, SubItemsCount: integer;
LineItem: array of string;
begin
ItemsCount:= ListView1.Items.Count;
for I := 0 to ItemsCount - 1 do // looping thru the items
begin
SubItemsCount:= ListView1.Items[I].SubItems.count;
SetLength(LineItem, SubItemsCount + 1);
LineItem[0]:= ListView1.Items[0].Caption; // the first item caption (first col)
for J := 0 to SubItemsCount - 1 do // looping thru the subitems of each line
LineItem[J+1]:= ListView1.Items[I].SubItems.Strings[J];
//
// just to see the sql command
// ShowMessage(
// Format(SQLCMD, [ QuotedStr(LineItem[0]),
// QuotedStr(LineItem[1]),
// LineItem[2], //int field no need to quote the parameter
// QuotedStr(LineItem[3])]
// ));
//
with TAdoQuery.Create(nil) do
try
ConnectionString:= 'Your Connection String';
SQL.Text:=
Format(SQLCMD, [QuotedStr(LineItem[0]),
QuotedStr(LineItem[1]),
LineItem[2], //int field no need to quote the parameter
QuotedStr(LineItem[3]));
ExecSql; // you might handel execsql to know the row was affected, also not sure if unidac have the same method
finally
Free;
end;
SetLength(LineItem, 0);
end;
end;
The following solution uses a TSQLQuery, which means that I am connecting to Firebird. I am sure that there are other query components which will give you the same result.
with dstlist do // this is the list view
for i:= 1 to items.count do
with qInsert do // this is the query component
begin
dstlist.itemindex:= i - 1;
lvitem:= dstlist.selected; // select the correct node
close;
parambyname ('p1').asstring:= lvitem.caption; // name
parambyname ('p2').asstring:= lvitem.subitems[0]; // position
parambyname ('p3').asinteger:= strtoint (lvitem.subitems[1]); // sall
parambyname ('p4').asdate:= strtodate (lvitem.subitems[2]);
execsql;
end;
The query itself would be something like
insert into table (name, position, sall, adate)
values (:p1, :p2, :p3, :p4)