View Full Version : سوال: اضافه کردن فیلد به ADOTable و ذخیره در بانک اکسس
mansoorp
دوشنبه 18 مهر 1390, 09:34 صبح
با سلام
بعضی مواقع طبق نیاز مشتری لازمه فیلدهای جدیدی به جدول اکسس اضافه بشه این در حالیه که مدت زیادیه که برنامه در حال استفاده است و اطلاعاتی در اون ذخیره شده. بر این اساس لازمه که بانک در ابتدای برنامه چک بشه و فیلدهایی که موجود نیستند اضافه بشن و در جدول اکسس ذخیره بشن. بعد از جستجو و استفاده از کدهای زیر توی فایل اکسس فیلد جدید ایجاد نمیشه.
procedure TForm1.Button1Click(Sender: TObject);
var
Field: TField;
i: Integer;
begin
adoTable1.Active:=False;
for i:=0 to adoTable1.FieldDefs.Count-1 do
Field:=adoTable1.FieldDefs[i].CreateField(adoTable1);
Field:=TStringField.Create(adoTable1);
with Field do
begin
FieldName:=LabeledEdit1.Text;
field.Name:=adoTable1.Name+LabeledEdit1.Text;
DisplayLabel := LabeledEdit1.Text;
Calculated:=true;
DataSet:=adoTable1;
end;
adoTable1.Active:=True;
end;
در ضمن لازمه توی DBgrid هم تغییرات اعمال بشن. ... متشکر
یوسف زالی
دوشنبه 18 مهر 1390, 21:18 عصر
سلام.
استفاده از فیلدهای محاسباتی در بانک داده تاثیری نداره دوست من.
ضمنا میتونید این کار رو به صورت ویژوالی هم انجام بدید.
راهنمایی: دوبار کلیک روی ADO
soft-c
دوشنبه 18 مهر 1390, 22:17 عصر
استفاده از فیلدهای محاسباتی در بانک داده تاثیری نداره دوست من.
میشه بیشتر توضیح بدید؟
یوسف زالی
دوشنبه 18 مهر 1390, 23:19 عصر
ایشون فرموده بودند "و ذخیره در بانک اکسس"
استفاده از این جور فیلدها در حقیقت نه داده ای رو اضافه می کنه نه فیلدی.
بلکه مثل این می مونه که سلکتی بنویسید از دو تا فیلد و فیلد سومی رو از جمع اونها بسازید:
select A, B, C=A+B from table
در اینجا مقدار C اصلا در جدول وجود نداره و در زمان اجرا ایجاد و پس از اون حذف می شه. مگر اینکه واقعا فیلدی رو مستقیم در جدول بسازید که حاصل محاسباتی فیلدهای دیگه باشه.
در اون صورت هم یک مقدار فقط خواندنی خواهید داشت.
alaveh
سه شنبه 19 مهر 1390, 01:48 صبح
با سلام
بعضی مواقع طبق نیاز مشتری لازمه فیلدهای جدیدی به جدول اکسس اضافه بشه این در حالیه که مدت زیادیه که برنامه در حال استفاده است و اطلاعاتی در اون ذخیره شده. بر این اساس لازمه که بانک در ابتدای برنامه چک بشه و فیلدهایی که موجود نیستند اضافه بشن و در جدول اکسس ذخیره بشن. بعد از جستجو و استفاده از کدهای زیر توی فایل اکسس فیلد جدید ایجاد نمیشه.
درست توضیح ندادین که چرا نمیتونید فیلد اضافه کنید ولی به هر دلیلی اگر واقعا امکان اضافه کردن فیلد وجود نداره می تونید یک جدول جدید که شامل فیلدهای قدیمی و جدید میشه درست کنید و با چند خط کد نویسی ساده داده های قدیمی رو به جدول جدید اضافه کنید و فیلدهای جدید رو هم یا خالی رها می کنید یا اگر محاسباتی هستند محاسبه می کنید یا با NULL یا عدد 0 یا هر چی که دلتون خواست پر می کنید .
البته خودتون برنامه نویس هستید و نیاز به توضیح نیست : برای اضافه کردن داده ها به جدول جدید به یک دستور FOR نیاز دارید و یک کوئری .
mansoorp
پنج شنبه 28 مهر 1390, 09:12 صبح
ضمن تشکر از دوستان. منظور من فقط فیلد محاسباتی نبود، هر نوع فیلدی ممکنه باشه. بعد از استفاده از کد فوق پیغام زیر میاد:
ADOTable1:'Fieldname' Not Found.
و توی فایل اکسس مربوطه هم فیلد مورد نظر ما اضافه نمیشه. چطور میشه در حال اجرا فیلد مورد نظرمون رو به جدول اکسس با استفاده از ADO اضافه کنیم بطوریکه هم توی DBGrid و هم توی فایل اکسس بوجود بیاد.
البته Alave گفته بودن که جدول قدیمی با یه جدول جدید خالی مقایسه بشه و اطلاعات به جدول جدید منتقل بشه که ایرادش اینه که در صورت بالا بودن حجم اطلاعات مشتری مقداری زمان بر هست و دیگه این که برای مشتریان راه دور یه جدول همراه فایل اجرایی باید ارسال بشه. دنبال یه راهم که فقط جدول چک بشه و فیلدهای جدید اضافه بشن همین... متشکر
یوسف زالی
پنج شنبه 28 مهر 1390, 22:34 عصر
برای اضافه کردن باید یک دستور add از دستورات DDL برای جدول اجرا شه. با adocommand
سپس شما فیلد مورد نظر رو در adotable اضافه کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.