Link to home
Start Free TrialLog in
Avatar of erik2000
erik2000

asked on

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
ASKER CERTIFIED SOLUTION
Avatar of mokule
mokule
Flag of Poland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of shaneholmes
shaneholmes

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



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

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 ... :)

Avatar of erik2000

ASKER

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

It depends what is Your aim but I suggest StoredProcedure, ADOCommand or ADOQuery
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
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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
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
I want to write to the grid something like this SetADOQueryValue(ADOQuery2,1,1,"my value");

Thanks
Erik
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.