如何将MySql数据库中的StringGrid内容保存在一列中?
How to save StringGrid content in MySql database in one column?
此代码以 '|'
作为分隔符获取每行的 StringGrid 内容。
procedure TForm1.datas();
var
iRow: integer;
RowData : string;
begin
{get stringgrid content}
for iRow := 1 to Form7.StringGrid1.RowCount -1 do // count rows
begin
RowData := Form7.StringGrid1.Cells[0, iRow] + '|' + Form7.StringGrid1.Cells[1, iRow] + '|' + Form7.StringGrid1.Cells[2, iRow] + '|' + Form7.StringGrid1.Cells[3, iRow] + '|' + Form7.StringGrid1.Cells[4, iRow] + '|' + Form7.StringGrid1.Cells[5, iRow] + '|';
names := RowData; // it only get the last row in string grid :(
end;
end;
此代码用于将数据保存到数据库:
{SAVE}
procedure TForm1.SaveBtnClick(Sender: TObject);
begin
datas; // get data
with SQLQuery4 do
begin
if RecordCount = 0 then
begin
close;
SQL.Text := 'Insert into my_db(names) values(:names)';
Params.ParamByName('names').AsString := names;
ExecSQL;
SQLTransaction4.Commit;
Close;
ShowMessage('Records Successfully Saved!');
end;
end;
end;
我想将所有 StringGrid 行保存到一个数据库列中,但它只保存最后一行的数据:(
我想像这样保存在我的数据库列中:
A|B|C|D|E| // first row
F|G|H|I|J| // second row
在您的 datas()
方法中,每个循环迭代 仅使用当前行的数据覆盖 names
的值。这就是为什么您只保存分配给 names
的最后一行。您需要改为 append 每行到 names
,preserving 其现有数据,例如:
procedure TForm1.datas();
var
iRow: integer;
RowData : string;
begin
names := ''; // <-- RESET THE STRING HERE
{get stringgrid content}
for iRow := 1 to Form7.StringGrid1.RowCount -1 do // count rows
begin
RowData := Form7.StringGrid1.Cells[0, iRow] + '|' + Form7.StringGrid1.Cells[1, iRow] + '|' + Form7.StringGrid1.Cells[2, iRow] + '|' + Form7.StringGrid1.Cells[3, iRow] + '|' + Form7.StringGrid1.Cells[4, iRow] + '|' + Form7.StringGrid1.Cells[5, iRow] + '|' + sLineBreak;
names := names + RowData; // <-- APPEND, NOT OVERWRITE!
end;
end;
不过,我可能会 re-write 将它改成更像这样的东西来稍微清理一下:
procedure TForm1.datas();
var
iRow, iCol: integer;
Grid: TStringGrid;
begin
names := '';
{get stringgrid content}
Grid := Form7.StringGrid1;
for iRow := Grid.FixedRows to Grid.RowCount-1 do // count rows
begin
for iCol := Grid.FixedCols to Grid.ColCount-1 do // count colums
begin
names := names + Grid.Cells[iCol, iRow] + '|';
end;
names := names + sLineBreak;
end;
end;
此代码以 '|'
作为分隔符获取每行的 StringGrid 内容。
procedure TForm1.datas();
var
iRow: integer;
RowData : string;
begin
{get stringgrid content}
for iRow := 1 to Form7.StringGrid1.RowCount -1 do // count rows
begin
RowData := Form7.StringGrid1.Cells[0, iRow] + '|' + Form7.StringGrid1.Cells[1, iRow] + '|' + Form7.StringGrid1.Cells[2, iRow] + '|' + Form7.StringGrid1.Cells[3, iRow] + '|' + Form7.StringGrid1.Cells[4, iRow] + '|' + Form7.StringGrid1.Cells[5, iRow] + '|';
names := RowData; // it only get the last row in string grid :(
end;
end;
此代码用于将数据保存到数据库:
{SAVE}
procedure TForm1.SaveBtnClick(Sender: TObject);
begin
datas; // get data
with SQLQuery4 do
begin
if RecordCount = 0 then
begin
close;
SQL.Text := 'Insert into my_db(names) values(:names)';
Params.ParamByName('names').AsString := names;
ExecSQL;
SQLTransaction4.Commit;
Close;
ShowMessage('Records Successfully Saved!');
end;
end;
end;
我想将所有 StringGrid 行保存到一个数据库列中,但它只保存最后一行的数据:(
我想像这样保存在我的数据库列中:
A|B|C|D|E| // first row
F|G|H|I|J| // second row
在您的 datas()
方法中,每个循环迭代 仅使用当前行的数据覆盖 names
的值。这就是为什么您只保存分配给 names
的最后一行。您需要改为 append 每行到 names
,preserving 其现有数据,例如:
procedure TForm1.datas();
var
iRow: integer;
RowData : string;
begin
names := ''; // <-- RESET THE STRING HERE
{get stringgrid content}
for iRow := 1 to Form7.StringGrid1.RowCount -1 do // count rows
begin
RowData := Form7.StringGrid1.Cells[0, iRow] + '|' + Form7.StringGrid1.Cells[1, iRow] + '|' + Form7.StringGrid1.Cells[2, iRow] + '|' + Form7.StringGrid1.Cells[3, iRow] + '|' + Form7.StringGrid1.Cells[4, iRow] + '|' + Form7.StringGrid1.Cells[5, iRow] + '|' + sLineBreak;
names := names + RowData; // <-- APPEND, NOT OVERWRITE!
end;
end;
不过,我可能会 re-write 将它改成更像这样的东西来稍微清理一下:
procedure TForm1.datas();
var
iRow, iCol: integer;
Grid: TStringGrid;
begin
names := '';
{get stringgrid content}
Grid := Form7.StringGrid1;
for iRow := Grid.FixedRows to Grid.RowCount-1 do // count rows
begin
for iCol := Grid.FixedCols to Grid.ColCount-1 do // count colums
begin
names := names + Grid.Cells[iCol, iRow] + '|';
end;
names := names + sLineBreak;
end;
end;