Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 533
  • Last Modified:

Acccessing DBGrid1 values using an array

Hey I would like to access my DBGrid using a two dimensional array like this
TStringGrid( DBGrid1 ).Cells[1,1] but it gives me "access violation" any other way this could be done?

Thanks
Erik
0
erik2000
Asked:
erik2000
  • 4
  • 3
  • 3
  • +1
2 Solutions
 
mokuleCommented:
You certeinly don't like it, but...

// goto col, row
  DBGrid1.DataSource.DataSet.First;
  for i := 0 to row-1 do
    DBGrid1.DataSource.DataSet.Next;
  DBGrid1.Columns[col].Field.AsString;
0
 
shaneholmesCommented:
Erik2000,

This is not possible. Although both components are Grids and do share some similiar hierarchy, the Cells property is introduced in the TStringGrid class declaration. It does not exist in the Hierarchy prior to TStringGrid.

Hope this Helps!

What exactly are you trying to do, maybe we can suggest an alternative method (Such as the fields array property, or the FieldByName method.

Shane



0
 
shaneholmesCommented:
Here is Mokules suggestion wrapped in a function called Cells

function MyForm.Cells(Row, Col): String;
begin
 result:= '';
  MyGrid.DataSource.DataSet.First;
  for i := 0 to Row - 1 do
    MyGrid.DataSource.DataSet.Next;
  result:= MyGrid.Columns[Col].Field.AsString;
end;


Shane
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
mokuleCommented:

Yes,

I don't want to wrap it like this because when You want to get some cells from one row it'll be extremly ineffective ... :)

0
 
erik2000Author Commented:
Hmm I was thinking that DBGrid was desined for this purpose but I guess Im wrong, Im trying to:
1. Access any cells value by either an array (example [1,1] ) or by the row number/column name
2. I would be interested in reading all the values from a column or row

The method mokule used is something Im looking for but I think it will be really slow, Im working on a dbgrid that has 100k records each row has 12 fields
Is there another way to access the data other then this? Maybe directly from the ADOQuery that Im using to get the data from the sql

Thanks
Erik
0
 
mokuleCommented:

It depends what is Your aim but I suggest StoredProcedure, ADOCommand or ADOQuery
0
 
erik2000Author Commented:
http://64.233.167.104/search?q=cache:J9F7R5LZUD8J:www.delphinautes.org/scripts/delphin.dll/GET%3FACTION%3DIFAQ%26NUM%3D7+dbgrid+GetEditText&hl=en&ie=UTF-8

I also found this online, but I cant access GETEDITTEXT how would I go about doing that?

Thanks
Erik
0
 
geobulCommented:
Hi,

Try this (directly from ADOQuery):

function GetADOQueryValue(q: TADOQuery; row, col: integer): string;
var
  offset: integer;
begin
  offset := row - q.RecNo;
  q.MoveBy(offset);
  result := q.Fields[col - 1].AsString;
end;

// usage:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetADOQueryValue(ADOQuery1, 3,2));
end;

Regards, Geo
0
 
erik2000Author Commented:
1. Isnt there a way to do it without moving the grid?
2. How would I go about writing to the grid?

Other then that the function works great.
Also I increased the points for this question
Thanks
Erik
0
 
geobulCommented:
Hi,

>1. Isnt there a way to do it without moving the grid?

I would use another ADOQuery component and clone the original one:

...
ADOQuery1.Open; // DBGrid is accosiated to this query
ADOQuery2.Clone(ADOQuery1);
...

and then will get values from ADOQuery2:
ShowMessage(GetADOQueryValue(ADOQuery2,100,2));

>2. How would I go about writing to the grid?

What exactly do you mean?

Regards, Geo
0
 
erik2000Author Commented:
I want to write to the grid something like this SetADOQueryValue(ADOQuery2,1,1,"my value");

Thanks
Erik
0
 
geobulCommented:
And you probably don't want to change the current record on DBGrid also? Assuming the current record is different from the one you're setting values to.
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 4
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now