View Full Version : Update کردن لیست فیلدها در ADO
حمیدرضاصادقیان
شنبه 07 اردیبهشت 1387, 15:02 عصر
سلام دوستان.میخواستم ببینم آیا در داخل کد میتونم لیست فیلدهایی که در fieldlist یکadotable یا adoquery هستند رو بروز کنم؟؟
من دستور Adotable1.fieldlist.update رو پیدا کردم در داخل help هم همین رو نوشته ولی من میخوام فیلدها رو که اضافه میکنه به صورت دینامیک به گرید لینک کنم.
که نشد.
A.Nemati
شنبه 07 اردیبهشت 1387, 16:56 عصر
فکر کنم به روز کردن لیست فیلدها و لینک کردن آنها با گرید یعنی اینکه ممکن است در هر بار اجرای ADOQuery یا ADOTable، تعداد، نام یا نوع فیلدهای خروجی متفاوت باشند و شما می خواهید به نسبت آنها، ستونهای گرید خود را تشکیل دهید، آیا منظور شما همین است؟
حمیدرضاصادقیان
شنبه 07 اردیبهشت 1387, 17:34 عصر
دقیقا همینطوره/
A.Nemati
شنبه 07 اردیبهشت 1387, 18:21 عصر
ADODataSet (از هر نوعی) خود را با DataSource به Grid متصل کنید. هر بار که ADODataSet اجرا شد:
1- اگر فیلدهای grid را دستی اضافه نکرده باشید و اتوماتیک فیلدها را شناخته باشد، باید به طور خودکار فیلدها در Grid نمایش داده شوند
2- اگر فیلدها در گرید دستی اضافه شده باشند (مثلا برای گذاشتن تیتر فارسی)، آنوقت شما ابتدا باید همه فیلدهای گرید را پاک کنی (با Clear)، سپس یک حلقه بزنی از 0 تا ADODataSet.FieldDefList .Count -1 و شروع کنی فیلدها را داخل حلقه، با مشخصات دلخواه Add کنی (مثلا اگر در نام فیلد کلمه Code وجود داشت، تیتر آنرا "کد" بگذاری و ...)
حمیدرضاصادقیان
شنبه 07 اردیبهشت 1387, 21:36 عصر
ممنون.روش قبلی همینطوریه.ولی من فیلدها رو در گرید اضافه کردم و میخواستم فیلدهایی که به صورت دینامیک به دیتاست اضافه میشند رو به گرید وصل کنم . که این کارو کردم.ولی وقتی یک فیلد calculated بهش اضافه میکنم دیگه گرید مقدار فیلدهارو قبول نمیکنه و خالی میشه.
و وقتی از لیست فیلدها ، فیلدهای calculate رو پاک میکنم دوباره محتویاتش رو به من نمایش میده.
A.Nemati
یک شنبه 08 اردیبهشت 1387, 10:45 صبح
راهی که من پیدا کردم به این صورته:
فرض کنیم که شما یک فیلد Calc نام FldCalc در ADOTable1 دارید.
OnFormCreate:
var
tmpTbl: TADODataSet;
begin
...
tmpTbl:= TADODataSet.Create(nil);
...
end;
OnFormDestroy:
begin
...
if Assigned(tmpTbl) then
FreeAndNil(tmpTbl);
...
end;
procedure TForm1.Button1Click(Sender: TObject);
var
fld: TField;
flds: TFields;
i: Integer;
begin
try
ADOTable1.Close;
ADOTable1.Fields.Clear;
if ADOTable1.TableName = 'Employees' then
ADOTable1.TableName := 'Customers'
else
ADOTable1.TableName := 'Employees';
ADOTable1.Open;
tmpTbl.Clone(ADOTable1);
ADOTable1.Close;
flds:= tmpTbl.Fields;
for i:= 0 to flds.Count - 1 do
ADOTable1.Fields.Add(flds[i]);
fld:= TIntegerField.Create(ADOTable1);
fld.FieldKind := fkCalculated;
fld.FieldName := 'FldCalc';
fld.Calculated := True;
fld.DataSet := ADOTable1;
ADOTable1.Open;
except
end;
end;
A.Nemati
سه شنبه 10 اردیبهشت 1387, 10:39 صبح
با عرض شرمندگي، اين كد اشكال داره!
كد صحيح رو در آدرس زير ببين
http://barnamenevis.org/forum/showthread.php?p=507054#post507054
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.