PDA

View Full Version : اضافه کردن یک ستون به جدول در دلفی



ghazal20
دوشنبه 12 اردیبهشت 1384, 17:25 عصر
من با دلفی و sql کار می کنم . می خواهم کاربر هرگاه خواست ستونی جدید به جدول اضافه کند نام ان را در edit1 تایپ کند و آن ستون به جدول اضافه شود. اما خطا می گیرد. آیا طریقه نوشتن کد اشتباه است :گیج:

m-khorsandi
دوشنبه 12 اردیبهشت 1384, 19:37 عصر
درود

اینجوری باید بنویسید:


alter table Tab_Sample add field4 char(10)


من دلیل ADOTable1.Insert رو نفهمیدم.

کدتون هم فکر کنم اینجوری باشه:


Temp := 'Alter Table Tab_Sample';
Temp := Temp + ' ' + 'Add';
Temp := Temp + ' Edit1.text +' Char(10)';


البته این به سبک شما بود ولی اینجوری هم خواناتر و هم منطقی تر هست.



ADOCommand1.CommandText := Format('Alter Table Table1 Add %s Char(20)', [Edit1.Text]);
ADOCommand1.Execute;

دنیای دلفی
سه شنبه 13 اردیبهشت 1384, 18:40 عصر
:تشویق:

ghazal20
سه شنبه 13 اردیبهشت 1384, 22:23 عصر
ممنون :D :flower:
اما یک مشکل دیگه اینکه وقتی این ستون اضافه می شه توی dbgrid نمایش داده نمیشه؟!

m-khorsandi
چهارشنبه 14 اردیبهشت 1384, 08:18 صبح
خوب سه تا حالت ممکنه وجود داشته باشه:

اگه شما فیلدها رو به DBGrid اضافه کردید، یکبار باید Dataset.Active مربوطه رو False و True کنید و با کدنویسی
هم فیلد مورد نظر رو به DbGrid اضافه کنید.

اگه شما فیلدها رو به ADOTable(فرضا) اضافه کردید یکبار باید Dataset.Active مربوطه رو False و True کنید
وفیلد جدید رو هم به ADOTable اضافه کنید با کدنویسی.

اگه هم هیچکدوم از این دو مورد نبود یکبار باید Dataset.Active مربوطه رو False و True کنید .
اگه هم ...

این سه تا رو من بلدم شاید مورد دیگه ایی هم باشه.
منظورم از Dataset همون Query, Table,... هست.

ghazal20
چهارشنبه 14 اردیبهشت 1384, 16:00 عصر
میشه بگید اینکارو چطوری انجام میدید.


adotable.fields.add(edit1.text);
adotable.close;
adotable.open;


آیا این سری کد درست است؟

m-khorsandi
چهارشنبه 14 اردیبهشت 1384, 16:18 عصر
نه، کدی که شما نوشتید اشتباه ست.

اگه بگی که از کدوم حالت استفاده میکنی من راهنمائیت میکنم.

m-khorsandi
چهارشنبه 14 اردیبهشت 1384, 16:33 عصر
اگه فیلدها به DBGrid اضافه شده باشن و به ADOTable اضافه نشده باشن از کد زیر:



DBGrid1.Columns.Add.FieldName := 'Field1';


زمانی که فیلدها به ADOTable اضافه شدند و به DBGrid اضافه نشدن از کد زیر:



procedure TForm1.Button1Click(Sender: TObject);
var
NewField : TField;
i : Integer;
begin
ADOTable1.Active := False;
ADOTable1.Fielddefs.Update;
for i:= 0 to Pred(ADOTable1.FieldDefs.count) do
begin
NewField := ADOTable1.FindField(ADOTable1.FieldDefs[i].Name );
if Not assigned(NewField) then
begin
NewField := ADOTable1.FieldDefs[i].CreateField( ADOTable1.Owner );
NewField.name := ADOTable1.name + ADOTable1.FieldDefs[i].Name;
end;
end;

ADOTable1.Active := True;

end;


و زمانی که هم به ADOTable و هم به DBGrid اضافه شده باشن ترکیب این دو حالت رو اجرا میکنی.
خودت این دو تا بخش رو تبدیل به Procedure کن تا راحتر استفاده کنی.

ghazal20
چهارشنبه 14 اردیبهشت 1384, 19:28 عصر
ببخشید نمیدونم درست متوجه شدم یا نه؟
ولی فیلدهای من نه به dbgrid , نه adotable اضافه می شوند. فقط در جدولهای خود محیط enterprise manager دیده می شوند.

m-khorsandi
چهارشنبه 14 اردیبهشت 1384, 20:56 عصر
خوب پس ، بهترین حالتی که میتونست باشه، فقط کافیه یکبار Dataset.active رو True, False کنی. همین.

ghazal20
پنج شنبه 15 اردیبهشت 1384, 20:21 عصر
من مشکلم اینه که چرا ستونهای اضافه شده داخل dbgrid نمایش داده نمی شوند. و باید چه کدی بنویسم که همزمان با ا ینکه ستونها به جدول اضافه می شوند در dbgrid هم نمایش داده شوند؟ :گیج:

m-khorsandi
پنج شنبه 15 اردیبهشت 1384, 23:28 عصر
شما گفتید که فیلدها نه به Column مربوط به DBGrid اضافه شدند و نه به FieldList مربوط به ADOTable،
پس بعد از اضافه کردن فیلد یکبار کد زیر رو اجرا کنید:



ADOTable1.Active : =False;
ADOTable1.Active := True;

m-khorsandi
پنج شنبه 15 اردیبهشت 1384, 23:35 عصر
به طور کلی باید به این صورت باشه:




ADOCommand1.CommandText := Format('Alter Table Table1 Add %s Char(20)', [Edit1.Text]);
ADOCommand1.Execute;

ADOTable1.Active := False;
ADOTable1.Active := True;

[/quote]

ghazal20
جمعه 16 اردیبهشت 1384, 10:50 صبح
به طور کلی باید به این صورت باشه:




ADOCommand1.CommandText := Format('Alter Table Table1 Add %s Char(20)', [Edit1.Text]);
ADOCommand1.Execute;

ADOTable1.Active := False;
ADOTable1.Active := True;

[/quote]
من دقیقا همین کارو انجام میدم اما هیچ تغییری در ستونهای dbgrid حاصل نمی شود؟ :(

m-khorsandi
جمعه 16 اردیبهشت 1384, 11:56 صبح
پس شما یکی از همون دو تا کاری که اول گفتم انجام دادی، یعنی یا فیلدها رو به Grid یا به Table اضافه کردی!
به غیر از این دو حالت هم شاید اصلا این جدولی که به Grid وصله همون جدولی نیست که دارید به اون فیلد
اضافه میکنید، به خاطر همین هم تغییرات رو نمی بینید.


یکبار از اضافه کردن فیلد به DBGrid و ADOTable مطمئن شوید. :sad2:

ghazal20
چهارشنبه 21 اردیبهشت 1384, 00:36 صبح
آقای مهرداد من جدولم درسته . و فیلدها هم به هیچکدام اضافه نمی شوند و با false , true کردن adotable.active مشکلم حل نشد. :oops: :cry:

m-khorsandi
چهارشنبه 21 اردیبهشت 1384, 12:53 عصر
بیا شما یه کاری بکن;
یه نمونه برنامه کوچولو که تقریبا همون کار رو انجام بده(یعنی یه DBGrid باشه و بشه فیلد ساخت) بنویس و ضمیمه
یک از جوابها کن.ما هم اون رو میبینیم و میگیم که کجای کار ایراد داره، شاید تو همون نمونه برنامه مشکل رو خودت
پیدا کردی؟ :)

ghazal20
پنج شنبه 22 اردیبهشت 1384, 01:33 صبح
چشم :موفق: