update کردن جدول بر اساس فیلدی غیر از کلید اصلی
سلام به دوستان عزیز
آیا جدولی را میشه بر اساس فیلدی غیر از کلید اصلی اون Update کرد ؟ مثلا در کد زیر :
with FrmDMTransport.ADOQGasCar do
begin
FrmDMTransport.ADOTGasCar.Active:=false;
FrmDMTransport.ADOQGasCar.SQL.Clear;
FrmDMTransport.ADOQGasCar.SQL.Text:=' Update Gas_Car set Pelak= '''+TxtUpCarPelak2.Text+''' WHERE Pelak='''+TxtUpCarPelak1.Text+''' ';
FrmDMTransport.ADOQGasCar.ExecSQL;
FrmDMTransport.ADOTGasCar.Active:=true;
FrmDMTransport.ADOTGasCar.Close;
FrmDMTransport.ADOTGasCar.open;
end;
در کد بالا پلاک ، کلید اصلی جدول Gas_Car نیست .
کد بالا زمان اجرا Error میده . آیا اصولن میشه همچین کاری کرد و روش اون به چه صورت هست؟
ممنون از همه دوستان
نقل قول: update کردن جدول بر اساس فیلدی غیر از کلید اصلی
كد SQL درسته. فقط چرا بعد از ExecSQL دستور Active = True رو اجرا مي كني. همين باعث خطا مي شه
نقل قول: update کردن جدول بر اساس فیلدی غیر از کلید اصلی
with FrmDMTransport.ADOQGasCar do
begin
Active:=false;
SQL.Clear;
SQL.Add('Update Gas_Car set Pelak = '+QuotedStr(TxtUpCarPelak2.Text)+
' WHERE Pelak = '+QuotedStr(TxtUpCarPelak1.Text));
ExecSQL;
end;
نقل قول: update کردن جدول بر اساس فیلدی غیر از کلید اصلی
نقل قول:
نوشته شده توسط
merced
كد SQL درسته. فقط چرا بعد از ExecSQL دستور Active = True رو اجرا مي كني. همين باعث خطا مي شه
سلام
ممنون . حق با شماست . چرا با False و True کردن اکتیو AdoT خطا ایجاد میشه؟
یک سوال کلی؟
1)چه زمانی اکتیو Adotable بایستی False و True بشه و چه زمانی AdoQuery ؟
منظورم در دستورهای Select ، insert ، update ، Delete هست.
2) چه زمانی باید close و Open بشه؟ (اصولا بین False و True کردن و Close وopen کردن چه تفاوتی هست؟)
از همه دوستان عزیز ممنون
شاد و پیروز
نقل قول: update کردن جدول بر اساس فیلدی غیر از کلید اصلی
سلام دوست عزيز
در ADOQuery شما ميتونيد دستورات SQL رو بنويسيد و اجرا كنيد اما اگه نتيجه دستوري كه اجرا ميكنيد يك جدول باشه مثل نتيجه دستور Select اونوقت بايد ADOQuery رو Open كنيد ولي وقتي دستوري كه در ADOQuery مينويسيد فقط تغييري روي DataBase اعمال ميكنه يا عمليات خاصي رو انجام ميده كه خروجي به شكل جدول نداره اونوقت بايد از دستور ExecSQL استفاده كنيد.
اما بين False و True كردن جدولها و چه از نوع Query و چه از نوع Table و Closeو Open كردن اونها هيچ تفاوتي وجود نداره اشكالي هم كه در برنامه شما بوده بخاطر تفاوت بين Trueو False كردن با Open و Close كردن AdoQuery نبوده بلكه به خاطر اينه كه شما دستور Update رو داخل ADoQuery نوشتيد كه نتيجه اون يك جدول نيست بلكه تغييراتي رو در DataBase اعمال ميكنه و بعد خواستيد ADOQuery رو Open كنيد يا Active اون رو True كنيد.
به هر حال همونطور كه گفتم براي دستور هايي كه خروجي اونها جدول نيست مثل Update,Delete,Insert,... حتما بايد از ExecSQL استفاده كنيد. كه دوست عزيزمون هم اين مطلب رو به درستي بيان كرده اند.