PDA

View Full Version : سوال: ehlib



paeezeh
جمعه 20 شهریور 1388, 19:47 عصر
با سلام
من از گريد ehlib استفاده كردم.سه تا فيلد دارم كه مي خوام يكي از اونها از يك جدول خونده بشه . ولي وقتي برنامه اجرا مي شه دوتا ستون ديگه فعال نيست. بايد چكار كنم؟ لازمه بگم اطلاعات سه ستون در يك جدول ديگه ثبت مي شوند.

MHajiSoft
جمعه 20 شهریور 1388, 19:56 عصر
سلام
خوب اگه میخوای فقط نمایش اطلاعات داشته باشی، اول یه Query بنویس که فیلدهای مورد نظرت یک جا ایجاد بشن. بعدا اون رو به گرید مرتبط کن.

paeezeh
جمعه 20 شهریور 1388, 21:59 عصر
سلام
خوب اگه میخوای فقط نمایش اطلاعات داشته باشی، اول یه Query بنویس که فیلدهای مورد نظرت یک جا ایجاد بشن. بعدا اون رو به گرید مرتبط کن.
ببينيد فقط يك فيلد در جدول اول وجود داره. يعني اطلاعات درون ستون اول از جدول اول خونده ميشه. ستون دوم چك باكسه و ستون سوم توضيحاته. من مي خوام ستون دوم و سوم نيز فعال باشه و بعد از وارد كردن اطلاعات درون اونها هر سه ستون در يك جدول ديگه در ديتابيس ذخيره بشن.

paeezeh
جمعه 20 شهریور 1388, 23:07 عصر
دوست عزيز كاري كه گفتيد انجام دادم ولي بازم همون مشكل هست.فوريه.:متفکر:

vcldeveloper
شنبه 21 شهریور 1388, 02:50 صبح
اون کامپوننت از اسمش هم پیدا ست که برای نمایش داده های بانک هست. شما باید فیلدی در دیتاست داشته باشید که گرید بتونه نمایش بده. اگر کوئری شما فقط یک فیلد بر میگردونه، و مابقی اطلاعات را باید از جای دیگه ایی بخونید، باید برای دیتاستی که گرید بهش وصل هست، فیلدهای محاسباتی (Calculated Fields) ایجاد کنید، و خودتان در زمان اجرا به اون فیلدها مقدار بدید.

درباره ساخت اینگونه فیلدها قبلا توضیح داده شده.

paeezeh
شنبه 21 شهریور 1388, 14:16 عصر
اون کامپوننت از اسمش هم پیدا ست که برای نمایش داده های بانک هست. شما باید فیلدی در دیتاست داشته باشید که گرید بتونه نمایش بده. اگر کوئری شما فقط یک فیلد بر میگردونه، و مابقی اطلاعات را باید از جای دیگه ایی بخونید، باید برای دیتاستی که گرید بهش وصل هست، فیلدهای محاسباتی (Calculated Fields) ایجاد کنید، و خودتان در زمان اجرا به اون فیلدها مقدار بدید.

درباره ساخت اینگونه فیلدها قبلا توضیح داده شده.
با سلام و تشكر از اقاي كشاورز
من دو تا فيلدي كه توي جدولم نيست رو از محاسباتي ايجاد كردم اما بازم اجازه نمي ده چيزي توي اونها بنويسم و غير فعالن. كار ديگه اي بايد انجام بدم؟ كمكم كنيد. ممنون

vcldeveloper
شنبه 21 شهریور 1388, 17:51 عصر
فیلد محاسباتی قابل تغییر توسط کاربر نیست.

paeezeh
شنبه 21 شهریور 1388, 21:28 عصر
فیلد محاسباتی قابل تغییر توسط کاربر نیست.
پس من بايد چيكار كنم؟
كامل توضيح ميدم. يه فرم دارم كه كاربر در فرم قبلي يك سري مشخصات مثل نام دستگاه رو تعيين مي كنه. با توجه به هر دستگاه، موارد كنترلي اون دستگاه از جدول پايه موارد چك كردن خونده مي شه كه در ستون اول نمايش داده مي شه. ستون دوم كه چك باكسه و ستون سوم براي توضيحات در نظر گرفته شده. دو تا ستون آخر در جدولمون نيست. كاربر موارد كنترلي دستگاه رو چك ميكنه و موارد درست رو تيك مي زنه و در يه جدول ديگه كه هر سه ستون جزو فيلدهاي اون هست ذخيره ميكنه.
حالا من بايد چكار كنم كه دو ستون آخر نيز فعال باشند؟:عصبانی++:

paeezeh
یک شنبه 22 شهریور 1388, 09:10 صبح
كسي نيست جواب منو بده. فكر مي كردم مي تونم مشكلمو اينجا حل كنم.:گریه:

جواد ملاولی
یک شنبه 22 شهریور 1388, 11:07 صبح
سلام.

دو تا ستون آخر در جدولمون نيست.
چه جوری این دو تا ستون رو به دی بی گرید اضافه کردی؟

paeezeh
یک شنبه 22 شهریور 1388, 11:34 صبح
سلام.

چه جوری این دو تا ستون رو به دی بی گرید اضافه کردی؟
خوب من توي خاصيت sql كوئريم اون دوتا ستون رو از جدول مربوطه select كردم. شما راه ديگه اي مي دونيد؟

جواد ملاولی
یک شنبه 22 شهریور 1388, 12:18 عصر
خاصیت dataSource مربوط به DBGrid رو چی تنظیم کردی؟

paeezeh
یک شنبه 22 شهریور 1388, 14:18 عصر
سلام.

چه جوری این دو تا ستون رو به دی بی گرید اضافه کردی؟
خوب من توي خاصيت sql ، كوئريم اون دوتا فيلد رو از جدولي كه قراره اطلاعات توش دخيره بشن select كردم. كاره ديگه اي ميشه كرد. ستون اولم اما از جدول پايه مياد. لطفا كمك كنيد.

جواد ملاولی
یک شنبه 22 شهریور 1388, 15:28 عصر
شما کوئری رو اینجوری بنویس که یک فیلد از جدول اول (به قول خودتون جدول پایه) و دو فیلد از جدول دوم برگردونه؛ نه اینکه فقط دو فیلد از جدول دوم select کنه. بعد از این کار DBGrid رو وصل کن به همین کوئری.
اینجوری مشکلت حل میشه.
بعد میتونی اطلاعات این کوئری رو در جدول دوم ذخیره کنی.

paeezeh
یک شنبه 22 شهریور 1388, 16:23 عصر
شما کوئری رو اینجوری بنویس که یک فیلد از جدول اول (به قول خودتون جدول پایه) و دو فیلد از جدول دوم برگردونه؛ نه اینکه فقط دو فیلد از جدول دوم select کنه. بعد از این کار DBGrid رو وصل کن به همین کوئری.
اینجوری مشکلت حل میشه.
بعد میتونی اطلاعات این کوئری رو در جدول دوم ذخیره کنی.
ممنونم.من اين كارو انجام دادم. تونستم سه تا فيلد رو به سه ستون وصل كنم. اما بازم دوتا ستون اخرم غير فعالن . چرا؟

جواد ملاولی
یک شنبه 22 شهریور 1388, 16:57 عصر
ممنونم.من اين كارو انجام دادم. تونستم سه تا فيلد رو به سه ستون وصل كنم. اما بازم دوتا ستون اخرم غير فعالن . چرا؟
اگه میتونی سورس این تکه برنامه رو بزار اینجا تا بررسی کنیم.

paeezeh
یک شنبه 22 شهریور 1388, 17:46 عصر
من از طريق join كردن دوتا جدول به فيلدهايي كه مي خواستم دسترسي پيدا كردم. همونطور كه مي دونيد join داراي قسمت on است كه من اونو روي يه فيلد مشترك گذاشتم. ولي چون جدول دوم خاليه. در نتيجه هيچ ركوردي برگردونده نميشه و گريد من خالي مي مونه در صورتي كه من ميخوام ستون اولم با جدول اولم پر بشه. كار ه ديگه اي نميشه كرد؟

جواد ملاولی
یک شنبه 22 شهریور 1388, 20:35 عصر
از Union استفاده کنید.

paeezeh
یک شنبه 22 شهریور 1388, 22:58 عصر
واقعا ممنونم. تونستم با دستور union مشكلمو حل كنم. اما وقتي توي يه سطر يه چيزي مينويسم و يا چك باكسو تيك مي زنم و ميخوام برم يه سطر ديگه پيغام زير رو ميده.چرا؟
Row can not be located for updating . some values may have been changed since it was last read.

جواد ملاولی
یک شنبه 22 شهریور 1388, 23:45 عصر
اگه از ADO استفاده می کنید، این کد مشکلتون رو حل می کنه:

ADOQuery1.Properties['Update Criteria'].Value := 0;

paeezeh
دوشنبه 23 شهریور 1388, 00:16 صبح
اره. از adoqouery استفاده مي كنم. دستور select رو تو onshow نوشتم. اين كد رو بايد كجا بذارم.
يه سوال ديگه :ركورد هاي dbgrideh رو چطوري بايد توي جدولم ذخيره كنم. لازمه بگم 3تا فيلد ديگه هم دارم كه بيرون gride و واسه همه ركوردها ثابته. ممنون.

جواد ملاولی
دوشنبه 23 شهریور 1388, 05:37 صبح
دستور select رو تو onshow نوشتممنظورتون OnShow فرمه؟

اين كد رو بايد كجا بذارم.میتونی در رویداد AfterOpen بذاری.

ركورد هاي dbgrideh رو چطوري بايد توي جدولم ذخيره كنم.از طریق خاصیت Fields میتونی بهشون دسترسی داشته باشی. مثلا میتونی اینطور بنویسی:

Table2.FieldByName('نام فیلد').Value := DBGridEH1.Fields[شماره فیلد].AsVariant;
ضمناً شماره فیلد دی بی گرید از صفر شروع میشه.

paeezeh
دوشنبه 23 شهریور 1388, 12:21 عصر
منظورتون OnShow فرمه؟
میتونی در رویداد AfterOpen بذاری.
از طریق خاصیت Fields میتونی بهشون دسترسی داشته باشی. مثلا میتونی اینطور بنویسی:

Table2.FieldByName('نام فیلد').Value := DBGridEH1.Fields[شماره فیلد].AsVariant;
ضمناً شماره فیلد دی بی گرید از صفر شروع میشه.
سلام.من اون قطعه كد رو توي afteropen كوئري نوشتم اما بازم همون ارور رو ميده.
كوئري رو توي onshow فرم باز كردم.
براي ذخيره يكباره تمام ركوردهاي گريد از for استفاده كردم اما خطاي out of index ميده. كار ديگه اي ميشه انجام داد؟

جواد ملاولی
دوشنبه 23 شهریور 1388, 14:39 عصر
من اون قطعه كد رو توي afteropen كوئري نوشتم اما بازم همون ارور رو ميده. من تستش کردم. مشکلی نداره. احتمالا یه جایی از تنظیمات یا کد شما مشکل داره؛ بیشتر بررسی کنید.


براي ذخيره يكباره تمام ركوردهاي گريد از for استفاده كردم اما خطاي out of index ميده. كار ديگه اي ميشه انجام داد؟مقدار اولیه شمارنده حلقه رو چند دادید؟ مقدار نهایی اون رو هم چک کنید.

paeezeh
دوشنبه 23 شهریور 1388, 16:50 عصر
من تستش کردم. مشکلی نداره. احتمالا یه جایی از تنظیمات یا کد شما مشکل داره؛ بیشتر بررسی کنید.


مقدار اولیه شمارنده حلقه رو چند دادید؟ مقدار نهایی اون رو هم چک کنید.

ممنون.چك ميكنم.اون كد رو بايد براي كوئري بنويسم كه گريد بهش وصله ديگه؟
مقدار اوليه رو 1 و مقدار نهايي dbgirudeh1.recordcount -1 دادم. اما فقط ركورد اولمو به اندازه تعداد ركوردهاي گريد ذخيره ميكنه.

paeezeh
دوشنبه 23 شهریور 1388, 17:25 عصر
دقيق ميگم چيكار كردم. كد زير رو توي خاصيت sql كوئريم نوشتم تا بتونم فيلدهايي رو كه ميخوام به گريدم وصل كنم.


SELECT fc_check,fc_comment,TB_fanibaseCHK.control_item ,
TB_fanibaseCHK.check_period,oc_check,oc_comment,
TB_opratorbaseCHK.control_item ,TB_opratorbaseCHK.check_period
from TB_faniCHK,TB_fanibaseCHK,TB_opratorCHK,TB_oprator baseCHK

توي afteropen گريد كد ي كه شما گفتيد رو نوشتم.

ديتاسورس گريدمو به ديتاسورسي كه كوئريم به اون وصله وصل كردم.
براي اينكه ستون اول گريد رو پر كنم كد زير رو توي onshow فرمم گذاشتم.






with DataModule1.ADOQuery1 do
begin
SQL.Text:='select * from TB_set where set_name like'+QuotedStr(Edit3.Text);
Open;
end;
with DataModule1.ADOQuery3 do
begin
SQL.Text:='SELECT s_id,control_item,check_period,fc_date,fc_check,fc _comment from TB_faniCHK'+
' union '+
' select s_id,control_item as c1,check_period,null,null,null from TB_fanibaseCHK'+
' where s_id like '+QuotedStr(DataModule1.ADOQuery1.FieldValues['s_id'])+'and check_period like '+QuotedStr(Edit1.Text);
open;
end;

جواد ملاولی
دوشنبه 23 شهریور 1388, 17:36 عصر
اون كد رو بايد براي كوئري بنويسم كه گريد بهش وصله ديگه؟بله.


مقدار اوليه رو 1 و مقدار نهايي dbgirudeh1.recordcount -1 دادم.مگه DBGridEH خاصیت RecordCount داره؟
فکر کنم مقدار اولیه رو باید صفر بدی.
راستی من حواسم نبود، شما به جای اینکه رکوردهای DBGrid رو در جدول دوم ذخیره کنی، رکوردهای همون کوئری رو ذخیره کن؛ اینطوری بهتره.

paeezeh
دوشنبه 23 شهریور 1388, 17:45 عصر
من فكر مي كنم شما متوجه مشكل نشديد.بايد ركورد گريد رو ذخيره كنم.چون كوئريم فقط شامل ستون اول گريد ميشه.ستون دوم و سوم رو كاربر بايد پر كنه و سپس توي جدول دوم ذخيره كنه.
dbgrideh خاصيت recordcount داره . for من چه ايرادي داره؟

جواد ملاولی
دوشنبه 23 شهریور 1388, 21:04 عصر
من فكر مي كنم شما متوجه مشكل نشديد.بايد ركورد گريد رو ذخيره كنم.چون كوئريم فقط شامل ستون اول گريد ميشه.ستون دوم و سوم رو كاربر بايد پر كنه و سپس توي جدول دوم ذخيره كنه.
لطفا بگید وظیفه ADOQuery1 و ADOQuery3 چیه؟ هر کدوم چکار می کنه؟
شما DBGrid رو به کدوم یک از اینا وصل کردید؟


كد زير رو توي خاصيت sql كوئريم نوشتم تا بتونم فيلدهايي رو كه ميخوام به گريدم وصل كنم.


SELECT fc_check,fc_comment,TB_fanibaseCHK.control_item ,
TB_fanibaseCHK.check_period,oc_check,oc_comment,
TB_opratorbaseCHK.control_item ,TB_opratorbaseCHK.check_period
from TB_faniCHK,TB_fanibaseCHK,TB_opratorCHK,TB_oprator baseCHK

این دستور Select مال کدوم کوئریه؟


dbgrideh خاصيت recordcount داره .
من تست کردم نداشت!


for من چه ايرادي داره؟
دستور کاملش رو اینجا بنویس تا ببینیم می تونیم مشکلش رو حل کنیم یا نه؟

راستی یه بار هم گفتم، اگه سورس این قسمت از پروژه ات رو اینجا بزاری فکر کنم خیلی راحت تر بشه جواب داد.

paeezeh
دوشنبه 23 شهریور 1388, 21:46 عصر
براي جك كردن موارد كنترلي دستگاه هاي مختلف، كاربر توي يك فرم نام دستگاه، دوره زماني چك كردن و اسم خودشو انتخاب ميكنه و وارد فرم جديدي كه موارد كنترلي اون دستگاه رو با توجه به دوره از جدول پايه خونده ميشه و توي گريد نمايش داده ميشه.


Adoquery1 براي پيدا كردن نام دستگاه از جدول دستگاههاست. Adoquery3 براي خوندن موارد كنترلي دستگاه از جدول پايه است. كه ديتاسورس گريد به adoquery3 وصله.
procedure TFanicheckFM.FormShow(Sender: TObject);
begin
Edit1.Text:=Check1FM.ComboBox1.Text;
Edit3.Text:=Check1FM.ComboBox3.Text;
Edit2.Text:=Check1FM.ComboBox2.Text;

with DataModule1.ADOQuery1 do
begin
SQL.Text:='select * from TB_set where set_name like'+QuotedStr(Edit3.Text);
Open;
end;
with DataModule1.ADOQuery3 do
begin

SQL.Text:='SELECT s_id,control_item,check_period,fc_date,fc_check,fc _comment from TB_faniCHK'+
' union '+
' select s_id,control_item,check_period,null,null,null from TB_fanibaseCHK'+
' where s_id like '+QuotedStr(DataModule1.ADOQuery1.FieldValues['s_id'])+'and check_period like '+QuotedStr(Edit1.Text);
open;
end;
end;

دستور زير رو براي دسترسي به فيلدهاي دوم و سوم گريد كه از جدولي خونده شدند كه قراره بعد از پر كردن فرم توي اون دخيره بشن،توي خاصيت sql كوئري 3 نوشتم.
SELECT fc_check,fc_comment,TB_fanibaseCHK.control_item ,
TB_fanibaseCHK.check_period,oc_check,oc_comment,
TB_opratorbaseCHK.control_item ,TB_opratorbaseCHK.check_period
from TB_faniCHK,TB_fanibaseCHK,TB_opratorCHK,TB_oprator baseCHK


دستور for :
procedure TFanicheckFM.Button1Click(Sender: TObject);
var i:integer;
begin

for I := 1 to DBGridEh1.RowCount - 1 do
begin
with DataModule1.ADOQuery2 do
begin
SQL.Text:='insert into TB_faniCHK (s_id,control_item,check_period,fc_date,fc_check,f c_comment,fani_name)'+
' values (' +IntToStr(DataModule1.ADOQuery1.FieldValues['s_id'])+','+
QuotedStr(Trim(DBGridEh1.Fields[0].AsVariant))+','+QuotedStr(Edit1.Text)+','+
QuotedStr(DBGridEh1.Columns[1].Title.Caption)+','+BoolToStr(DBGridEh1.Fields[1].AsBoolean)+','+
QuotedStr(Trim(DBGridEh1.Fields[2].AsVariant))+','+QuotedStr(Edit2.Text)+')';
ExecSQL;

end;
end;
end;

paeezeh
سه شنبه 24 شهریور 1388, 11:36 صبح
سلام.خواهش ميكنم يكي بگه من چيكار بايد بكنم؟ من فردا دفاعيه دارم و اين مشكلم هنوز برطرف نشده.خواهش مي كنم.:گریه::گریه::گریه:

جواد ملاولی
سه شنبه 24 شهریور 1388, 16:10 عصر
خواهش ميكنم يكي بگه من چيكار بايد بكنم؟ من فردا دفاعيه دارم و اين مشكلم هنوز برطرف نشده.خواهش مي كنم
دوست عزیز. چون اطلاعات کافی از پروژه ات ندارم نمی تونم مشکلت رو پیدا کنم. من نمی دونم شما چند جدول داری، چه فیلدهایی دارن و ... . توضیحاتی هم که دادی کافی نیست و یه کم هم گنگه.
قبلا هم گفتم؛ برنامه ات رو اینجا آپلود کن تا ببینیم مشکلش چیه. انشالله تا شب درست میشه.

paeezeh
سه شنبه 24 شهریور 1388, 16:36 عصر
دوست عزیز. چون اطلاعات کافی از پروژه ات ندارم نمی تونم مشکلت رو پیدا کنم. من نمی دونم شما چند جدول داری، چه فیلدهایی دارن و ... . توضیحاتی هم که دادی کافی نیست و یه کم هم گنگه.
قبلا هم گفتم؛ برنامه ات رو اینجا آپلود کن تا ببینیم مشکلش چیه. انشالله تا شب درست میشه.
تمام برنامه رو بذارم يا فقط همون فرمي كه ايراد داره؟

جواد ملاولی
سه شنبه 24 شهریور 1388, 18:12 عصر
تمام برنامه رو بذارم يا فقط همون فرمي كه ايراد داره؟
اگه میتونی همه رو بزار. دیتابیس رو هم بذار.

paeezeh
سه شنبه 24 شهریور 1388, 19:03 عصر
اگه میتونی همه رو بزار. دیتابیس رو هم بذار.

خيلي سعي كردم همه رو بذارم.attach نشد.
check1UN فرميه كه كاربر نوع چك ليست رو انتخاب ميكنه.و وارد fanicheckUN ميشه. اسكريپت جدولام رو هم گذاشتم. ديتابيس رو هم نتونستم attach كنم. اميدوارم بدرد بخوره.
به خاطر كمكتون يك دنيا ممنون.

جواد ملاولی
سه شنبه 24 شهریور 1388, 20:50 عصر
دو تا سوال دارم:
1- مگه DBGridEH شما به ADOQuery3 وصل نیست؟
2- مگه این سه تا ستونی که در DBGridEH شما هست، توسط همین ADOQuery3 از دو تا جدول بدست نمیاد؟

paeezeh
سه شنبه 24 شهریور 1388, 22:06 عصر
دو تا سوال دارم:
1- مگه DBGridEH شما به ADOQuery3 وصل نیست؟
2- مگه این سه تا ستونی که در DBGridEH شما هست، توسط همین ADOQuery3 از دو تا جدول بدست نمیاد؟
آره.جواب دوتا سوالتون مثبته.

جواد ملاولی
سه شنبه 24 شهریور 1388, 22:31 عصر
آره.جواب دوتا سوالتون مثبته.خیلی خوب. بنابراین شما به جای اینکه رکوردهای دی بی گرید رو در جدول دوم ذخیره کنی، رکوردهای همین ADOQuery3 رو ذخیره کن. این خیلی راحت تره. کدش رو فکر کنم خودت بتونی بنویسی.
اگه مشکلی بود بگو. من امشب باز هم به این تاپیک سر میزنم.

راستی مشکل دستور for هم اینه که هیچ دستوری در حلقه ننوشتی که به رکورد بعدی بره و در هر بار اجرای حلقه رکورد اول رو ذخیره می کنه.

paeezeh
سه شنبه 24 شهریور 1388, 23:37 عصر
خیلی خوب. بنابراین شما به جای اینکه رکوردهای دی بی گرید رو در جدول دوم ذخیره کنی، رکوردهای همین ADOQuery3 رو ذخیره کن. این خیلی راحت تره. کدش رو فکر کنم خودت بتونی بنویسی.

من اين كارو كردم ذخيره مي كنه.البته با كد قبلي هم ذخيره مي كرد.اما وقتي ميخوام از يه ركورد وارد يكي ديگه بشم همون خطاي row can not be located رو ميده.


راستی مشکل دستور for هم اینه که هیچ دستوری در حلقه ننوشتی که به رکورد بعدی بره و در هر بار اجرای حلقه رکورد اول رو ذخیره می کنه.

ميشه بگيد دستورش چيه؟
كد من اينه:
for I := 1 to DataModule1.ADOQuery3.RecordCount - 1 do
begin
with DataModule1.ADOQuery2 do
begin
SQL.Text:='insert into TB_faniCHK (s_id,control_item,check_period,fc_date,fc_check,f c_comment,fani_name)'+
' values (' +IntToStr(DataModule1.ADOQuery1.FieldValues['s_id'])+','+
QuotedStr(DataModule1.ADOQuery3.FieldValues['control_item'])+','+QuotedStr(DataModule1.ADOQuery3.FieldValues['check_period'])+','+
QuotedStr(DBGridEh1.Columns[1].Title.Caption)+','+BoolToStr(DataModule1.ADOQuery 3.FieldByName('fc_check').AsBoolean)+','+
QuotedStr(DataModule1.ADOQuery3.FieldValues['fc_comment'])+','+QuotedStr(Edit2.Text)+')';
ExecSQL;
end;:خجالت:

جواد ملاولی
سه شنبه 24 شهریور 1388, 23:56 عصر
یک نکته خارج از بحث: وقتی می خواید در پستتون کد بنویسید، اون رو داخل تگ کد بنویسید تا درست نمایش داده بشه.
و اما کد شما:

DataModule1.ADOQuery3.First;
while not DataModule1.ADOQuery3.Eof do
begin
with DataModule1.ADOQuery2 do
begin
SQL.Text:='insert into TB_faniCHK (s_id,control_item,check_period,fc_date,fc_check,f c_comment,fani_name)'+
' values (' +IntToStr(DataModule1.ADOQuery1.FieldValues['s_id'])+','+
QuotedStr(DataModule1.ADOQuery3.FieldValues['control_item'])+','+QuotedStr(DataModule1.ADOQuery3.FieldValues['check_period'])+','+
QuotedStr(DBGridEh1.Columns[1].Title.Caption)+','+BoolToStr(DataModule1.ADOQuery 3.FieldByName('fc_check').AsBoolean)+','+
QuotedStr(DataModule1.ADOQuery3.FieldValues['fc_comment'])+','+QuotedStr(Edit2.Text)+')';
ExecSQL;
end;
Next;
end;امیدوارم این کد مشکلتون رو حل کنه. البته من دستور اس کیو ال تون رو بررسی نکردم.

paeezeh
چهارشنبه 25 شهریور 1388, 00:08 صبح
امیدوارم این کد مشکلتون رو حل کنه. البته من دستور اس کیو ال تون رو بررسی نکردم.
الان ديگه حتي وقتي دكمه ثبت رو هم مي زنم همون خطاي row can not رو ميده

جواد ملاولی
چهارشنبه 25 شهریور 1388, 00:16 صبح
یه کار دیگه هم می تونید بکنید: برای ثبت، از دستورات sql استفاده نکنید؛ از همون دستور Insert و post جدول استفاده کنید.

جواد ملاولی
چهارشنبه 25 شهریور 1388, 00:30 صبح
اگه باز هم مشکلتون حل نشد سعی کنید کل پروژه تون رو آپلود کنید (سری قبل نمی دونم چرا نتونستید آپ کنید؟). انشالله درستش می کنیم.

paeezeh
چهارشنبه 25 شهریور 1388, 00:32 صبح
یه کار دیگه هم می تونید بکنید: برای ثبت، از دستورات sql استفاده نکنید؛ از همون دستور Insert و post جدول استفاده کنید.
متوجه منظورتون نميشم.ميشه توضيح بديد.من تا حالا اين كارو نكردم.

جواد ملاولی
چهارشنبه 25 شهریور 1388, 00:43 صبح
متوجه منظورتون نميشم.ميشه توضيح بديد.من تا حالا اين كارو نكردم.
برای درج یک رکورد در یک ADOTable، از دستور Insert استفاده میشه. یک کد نمونه:

with ADOTable1 do
begin
Insert;
FieldByName('نام فیلد').Value := مقدار مورد نظر;
FieldByName('نام فیلد').Value := مقدار مورد نظر;
.
.
.
FieldByName('نام فیلد').Value := مقدار مورد نظر;
Post;
end;
من دو سه ساعت دیگه میام. سعی کنید پروژه تون رو بذارید.

paeezeh
چهارشنبه 25 شهریور 1388, 02:55 صبح
سلام.بك آپ ديتابيس و برنامه رو گذاشتم. ولي فايل exe رو نشد بذارم.
username رو admin و password رو 1 وارد كنيد. واقعا ممنون.
sql ام 2000 و دلفي 2007

جواد ملاولی
چهارشنبه 25 شهریور 1388, 05:10 صبح
من الان پروژه تون رو دانلود کردم. دارم بررسی می کنم...

جواد ملاولی
چهارشنبه 25 شهریور 1388, 06:57 صبح
متاسفانه هر کاری کردم نتونستم sql server 2000 رو درست نصب کنم. نمی دونم چرا اذیت می کنه؛ معذرت. و بنابراین نتونستم برنامه رو تست کنم.
یه راه حل برای از بین بردن اون پیغام خطا(row can not):
خاصیت LockType همه ی جدولها و کوئری هاتون رو به ltPessimistic تغییر بدید. امیدوارم دیگه جواب بده.

paeezeh
چهارشنبه 25 شهریور 1388, 08:20 صبح
متاسفانه هر کاری کردم نتونستم sql server 2000 رو درست نصب کنم. نمی دونم چرا اذیت می کنه؛ معذرت. و بنابراین نتونستم برنامه رو تست کنم.
یه راه حل برای از بین بردن اون پیغام خطا(row can not):
خاصیت LockType همه ی جدولها و کوئری هاتون رو به ltPessimistic تغییر بدید. امیدوارم دیگه جواب بده.
درست نشد.ازتون ممنونم. واقعا ممنون.

جواد ملاولی
چهارشنبه 25 شهریور 1388, 11:32 صبح
یک نکته هم هست؛ اگه یه جدول یا کوئری فیلد کلید نداشته باشه و بخوایم یه رکوردش رو ویرایش یا حذف کنیم، باز هم اون پیغام خطا میاد.

paeezeh
شنبه 04 مهر 1388, 20:10 عصر
یک نکته هم هست؛ اگه یه جدول یا کوئری فیلد کلید نداشته باشه و بخوایم یه رکوردش رو ویرایش یا حذف کنیم، باز هم اون پیغام خطا میاد.
سلام دوست عزيز. من مشكلم حل نشده. فيلد كليد جدولي كه اطلاعاتمو ازش مي خونم به جدول و كوئري اضافه كردم اما جواب نداد. ميشه اگه هنوز برنامم رو داريد بررسي كنيد ايراد كارم كجاست؟ ممنون

جواد ملاولی
یک شنبه 05 مهر 1388, 16:01 عصر
من مشكلم حل نشده. فيلد كليد جدولي كه اطلاعاتمو ازش مي خونم به جدول و كوئري اضافه كردم اما جواب نداد. ميشه اگه هنوز برنامم رو داريد بررسي كنيد ايراد كارم كجاست؟سلام. چرا زودتر نگفتید؟ من فکر کردم مشکلتون حل شده که دیگه کامنت نذاشتید. باشه من بررسی می کنم. البته باید یه sql server نسخه developer پیدا کنم؛ چون نسخه enterprise رو سیستم من نصب نمیشه. به هر حال سعیم رو می کنم.
فعلا خداحافظ

paeezeh
سه شنبه 07 مهر 1388, 22:07 عصر
سلام.چي شد تونستيد حلش كنيد؟