2013-03-04 1 views
0

Я ищу пример, как сохранить данные из списка в базу данных.Вставить данные из списка в базу данных delphi

У меня есть ListView с некоторыми данными:

http://s24.postimage.org/i1rhxnadx/listview.jpg

и базы данных MySQL:

ID, имя, должность, Салль, дата

может кто-то показать мне пример того, как сделай это?

thx.

+5

Что вы пробовали? какие компоненты db вы используете? – RRUZ

+0

Я использую компонент UniDac (devart.com) db, я не могу попробовать .. потому что я не могу заполнить, как начать, можете ли вы дать мне несколько советов? – vkatsitadze

ответ

1

Не знаю, имеет ли TUNIQuery метод ExecSql, но это будет работать с TADOQuery, в моем случае ListView.ViewStyle устанавливается в vsReport и содержит 4 столбца.

Я думаю, что если вы используете StringGrid или DBGrid будет намного легче Генделя

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; 
+0

Спасибо за внимание, я проверю его позже и отчитаю отчеты – vkatsitadze

+0

после небольших изменений, у меня есть рабочий источник. благодаря – vkatsitadze

1

Следующее решение использует TSQLQuery, что означает, что я подключаю к Firebird. Я уверен, что есть другие компоненты запроса, которые дадут вам тот же результат.

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; 

Сам запрос будет что-то вроде

insert into table (name, position, sall, adate) 
values (:p1, :p2, :p3, :p4)