简体   繁体   中英

insert data from listview into database delphi

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM