I have on my form MSConnection1, MSQuery1, and DataSource1.
How to load data to StringGrid1?
Loading data to StringGrid
Loading Data in a grid
Hi
There are different ways:
Use a DBgrid in stead of a stringgrid. A Dbgrid has a property Datasource, so you connect the dbgrid to the datasource, the datasource to the Dataset (TMSQuery or TMSTable), and the dataset to the connection. Upon setting everything to retreive data, the grid is automatically populated.
Be aware there are different dbaware grids apart from the one shipping with Delphi and C++Builder. Some are better than others.
If you want more control than the dbgrid can provide, you will have to do some code to get the data in the stringgrid.
Something like:
Table1.open; //Or Query1, depending what you have..
idx := 0;
while not Table1.eof do
begin
grid1.cells[0, idx] := Table1.Fields[0].asString; //access field by index
grid1.cells[1, idx] := Table1.FieldByName('someField').asString; //access field by name
Table1.next;
idx := idx + 1;
end;
It really depends on what you want to acheive.. I am just guessing but I think you are fairly new to Delphi/C++builder so the quickest way to acomplish a grid with data is using a db-grid.
Good luck
Jens Fudge
There are different ways:
Use a DBgrid in stead of a stringgrid. A Dbgrid has a property Datasource, so you connect the dbgrid to the datasource, the datasource to the Dataset (TMSQuery or TMSTable), and the dataset to the connection. Upon setting everything to retreive data, the grid is automatically populated.
Be aware there are different dbaware grids apart from the one shipping with Delphi and C++Builder. Some are better than others.
If you want more control than the dbgrid can provide, you will have to do some code to get the data in the stringgrid.
Something like:
Table1.open; //Or Query1, depending what you have..
idx := 0;
while not Table1.eof do
begin
grid1.cells[0, idx] := Table1.Fields[0].asString; //access field by index
grid1.cells[1, idx] := Table1.FieldByName('someField').asString; //access field by name
Table1.next;
idx := idx + 1;
end;
It really depends on what you want to acheive.. I am just guessing but I think you are fairly new to Delphi/C++builder so the quickest way to acomplish a grid with data is using a db-grid.
Good luck
Jens Fudge
1. I want to load first column to StringGrid.
2. Manually write data to second and third column.
3. Send the whole StringGrid to another table.
Everything is OK but records are only loaded to the StringGrid default columns. In table is 23 records but in StringGrid I can see only 4.
Thank you for help.
2. Manually write data to second and third column.
3. Send the whole StringGrid to another table.
Everything is OK but records are only loaded to the StringGrid default columns. In table is 23 records but in StringGrid I can see only 4.
Thank you for help.
Here is a code example of loading data from the TMSQuery component to the TStringGrid component:Also you can use the TVirtualTable and TCRBatchMove components for your task. Here is a code example:Note that in this case table2 must have the exact fields that table1 has, and additional fields test1 and test2. For more information about the TVirtualTable and TCRBatchMove components, please read the SDAC documentation.
Code: Select all
procedure TMainForm.BitBtnClick(Sender: TObject);
var
i: integer;
begin
MSQuery.Open;
StringGrid.ColCount := MSQuery.FieldCount + 2; // two columns for additional data
StringGrid.RowCount := MSQuery.RecordCount + 1;
for i := 0 to MSQuery.FieldCount - 1 do
StringGrid.Cells[i, 0] := MSQuery.Fields[i].FieldName;
MSQuery.First;
while not MSQuery.Eof do begin
for i := 0 to MSQuery.FieldCount - 1 do
StringGrid.Cells[i, MSQuery.RecNo] := MSQuery.Fields[i].AsString;
MSQuery.Next;
end;
end;
Code: Select all
procedure TMainForm.BitBtn1Click(Sender: TObject);
var
i: integer;
begin
MSQuery1.SQL.Text := 'select * from table1';
MSQuery1.Open;
for i := 0 to MSQuery1.FieldCount - 1 do
VirtualTable.AddField(MSQuery1.Fields[i].FieldName, MSQuery1.Fields[i].DataType, MSQuery1.Fields[i].Size, MSQuery1.Fields[i].Required);
CRBatchMove.Source := MSQuery1;
CRBatchMove.Destination := VirtualTable;
VirtualTable.Open;
CRBatchMove.Execute;
VirtualTable.AddField('test1', ftString, 50); // additional columns
VirtualTable.AddField('test2', ftString, 50);
// adding data in additional columns
end;
procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
MSQuery2.SQL.Text := 'select * from table2';
CRBatchMove.Source := VirtualTable;
CRBatchMove.Destination := MSQuery2;
CRBatchMove.Execute;
end;