ورود

View Full Version : امان از این sql باز هم مشکل



rambod51
سه شنبه 05 خرداد 1383, 00:30 صبح
من موقع حذف محتویات یه qury با خطای زیر مواجه می شم
اینم دستوراتش


dm1.q1.Close;
dm1.q1.SQL.Clear;
dm1.q1.Params.CreateParam(ftString, 'n', ptInput);
dm1.q1.ParamByName('n').Value := edit1.text;
dm1.q1.SQL.add('delete from sanad where No_sanad=:n' );
dm1.q1.open;
frdelete.close;
پیغام خطا رو هم ضمیمه کردم

SReza1
سه شنبه 05 خرداد 1383, 00:45 صبح
خوب چرا بدون استفاده از پارامترها نمیسازی. منظورم اینه که مستقیم Edit رو استفاده کنی در SQL

hamidrezaA
سه شنبه 05 خرداد 1383, 04:32 صبح
سلام،
یک اشکال فنی دیدم
اعمال update ,delete با Execsql انجام میشود نه با open.

rambod51
چهارشنبه 06 خرداد 1383, 07:17 صبح
آقا حمید ممنون درست شد
ولی موقع ویرایش کرده چه کار کنم من با دستور select اطلاعاتو واکشی کردو و اونو ریختم توی یه datasu ولی برای ویرایش اون اطلاعات خطای readonly از طرف سیستم صادر میشه من باید چه کار کنم از دستور insert into اگه بخوام استفاده کنم چه جوری باید اونم بنویسم ـ شکل دستوری اون توی دلفی ـ ممنون

baabi
چهارشنبه 06 خرداد 1383, 08:50 صبح
میشه یه کم واضحتر بنویسی؟
اما syntax برای insert into اینه:


insert into TARGET ( field1 , field 2,...)
select (sf1 , sf2 , ... )
from SOURCE

hamidrezaA
چهارشنبه 06 خرداد 1383, 16:16 عصر
سلام ، ممنون از اینکه تونستم کمکی کنم
معمولا هر سوالی در محل سوال خود پرسیده می شود. و اگر بخواهید سوالی در سوال فعلی کنید لینک اصلی سوال مربوطه را لطفا بیاوردید .اما با حضور ذهنی در مورد سوال مشابهی که قبلا دیدم و بچه ها اونو خوب جلو می بردند.
چند تا نکته :
به طور کلی query یک مجموعه داده خواندنی است . و اعمالی از قبیل ویرایش و سپس اعمال آن ویرایش به جداول موجود امکانپذیر نیست.

ممکنه بگید پس من چکار کنم که این تغییرات ممکن گردد

1- طراحی درست پایگاه داده ابتدایی ترین کار است ، کاری که به نظر ساده ولی در عین حال بایستی با دقت ، صبر وحوصله فراوان وبررسی کامل انجام شود.
2 - ایجاد روابط Master-Detail بین جداول و استفاده از جدول به جای query
3 - یادگیری SQL
4- کمک از بچه های سایت ( در این مورد سوالتونو خوب توضیح دهید( سرسری توضیح ندید) اگر سوال نامفهوم باشد من خودمو میگم دیگرانو نمیدونم میگم طرف تو دونستن و ادامه دادن موضوع سر سخت نیست. سوالو ول می کنم چون تو اینجا بچه ها برای جواب دادن در عین رفاقت و دوستی، وقت میذارند. واگر کسی سوالشو به صورت سرسری بپرسه به نوعی به خوانندگان بی احترامی کرده است. البته خودم میدونم بعضی وقتا به خاطر عدم اطلاعات کافی سوالی به طور سرسری پرسیده می شود. در این موارد بایستی آدم با خودش رو راست باشه اگه بلد نباشه، سوالو خوب بپرسه تا با روشن شدن موضوعات تاریک هم به خودش کمک کنه و هم دیگرانو گیج نکنه. )

----------
حمید رضا

SReza1
چهارشنبه 06 خرداد 1383, 19:02 عصر
سلام،
یک اشکال فنی دیدم
اعمال update ,delete با Execsql انجام میشود نه با open.
میتونی به کمک TDatabse این مشکل رو حل کنی! بدون استفاده از روش پاس دادن پارامتر اونطوری

rambod51
پنج شنبه 07 خرداد 1383, 09:24 صبح
من سوالمو دوباره مطرح میکنم امیدوارم بتونم اونو درست بگم
من یه بانک با پارادوکس دارم که اسناد خودمو توی اون ذخیره می کنم و به هر سند یه شماره اختصاص می دم هرسند نیز دارای چند رکورد می باشد یعنی سند شناره یک ممکنه که دارای 10 رکورد باشه حالا می خواهم که همه رکورد ها ی سند شماره 1 رو برای ویرایش روی صفحه بیارم. توسط دستور SELECT این کارو کردم و اونو توی یه گرید نمایش دادم ولی چون نتیجه فقط خواندنی بود نتونستم اطلاعاتو ویرایش کنم
برای این کار از شما کمک خواستم
البته به فکرخودم رسید که نتایج بدست اومده از دستور select رو توی یه بانک موقت ذخیره کنم و بعد از انجام ویرایش دوباره همه اطلاعات رو توسط دستور batchove به بانک اصلی ارسال کنم. ولی دستور insert into رو نتونستم درست اعمال کنم و سیستم خطا می گرفت

[b]insert into table1select * from table2 where no_sanad=:n[/b]
میخواه همه فیلدهارو دریافت و ارسال کنم. البته با یک فیلد هم بطور آزمایشی خطا می گرفت
امیدوارم تونسته باشم سئوالمو درست مطرح کنم
با تشکر از شما دوستان

baabi
شنبه 09 خرداد 1383, 06:35 صبح
فکر کنم مشکل اینجاست که قبل از اجرای دستور شما table مقصد رو خالی و آماده ندارین ( شاید اصلا نساختین ) وگر نه چیز دیگه ای نیست. من هم برای سند هام همین کارو میکنم.

rambod51
شنبه 09 خرداد 1383, 07:53 صبح
سلام
همه این کارها رو انجام دادم جدول و هم ساختم و هم خالیه ولی جواب نمی ده

Panje Tala
شنبه 09 خرداد 1383, 08:57 صبح
باسلام


من یه بانک با پارادوکس دارم که اسناد خودمو توی اون ذخیره می کنم و به هر سند یه شماره اختصاص می دم هرسند نیز دارای چند رکورد می باشد یعنی سند شناره یک ممکنه که دارای 10 رکورد باشه حالا می خواهم که همه رکورد ها ی سند شماره 1 رو برای ویرایش روی صفحه بیارم. توسط دستور SELECT این کارو کردم و اونو توی یه گرید نمایش دادم ولی چون نتیجه فقط خواندنی بود نتونستم اطلاعاتو ویرایش کنم
برای این کار از شما کمک خواستم
البته به فکرخودم رسید که نتایج بدست اومده از دستور select رو توی یه بانک موقت ذخیره کنم و بعد از انجام ویرایش دوباره همه اطلاعات رو توسط دستور batchove به بانک اصلی ارسال کنم.

چون تمام ابعاد برنامه بخوبی مشخص نیست و دلیل استفاده از این روش برای من نا مشخص است فقط یک پیشنهاد برای بررسی کردن می تونم ارایه کنم.من تو برنامه هام در چنین شکلی از فیلتر استفاده می کنم یعنی تو همون بانک اصلی با فیلتر کردن رکوردهایی که شماره سند آن با شماره سند داده شده برابر است تمام رکوردهای سند جدا شده و قابل پردازش هستند حتی عملیات های محاسباتی فقط بر روی آنها صورت می گیردودیگر مشکلات جانبی نخواهی داشت.

یاسر احسانی
شنبه 09 خرداد 1383, 12:33 عصر
سلام به دوستان گرامی :

چون دستوراتی مثل
insertto
delete
Backup
و ...
دارای مقدار بازگشتی نیستند با این اشکال مواجه می شید . شما می تونید در اجزای Ado از Ado Command یا تو همون Quary از یک حلقه استثنای Try .... Expect استفاده نمایید .

rambod51
شنبه 09 خرداد 1383, 22:21 عصر
با سپاس از شما
اگه از فیلتر استفاده کنم سرعت پایین نمی آید

Panje Tala
یک شنبه 10 خرداد 1383, 08:52 صبح
با سلام
فیلتر قابلیتهایی را بوجود می آورد که اگر بخواهید آنرا با دستور Select ایجاد کنید بمراتب وقت بیشتری را صرف خواهید کرد.چراکه شرط در دوحالت باید بررسی گردد نمایش هر دو هم به یک صورت است ولی برای Readonly نبودن نتیجه Query بمراتب باید کلی از منابع سیستم رو تلف کنیدو جالب اینجاست با اضافه شدن هر رکورد کل پروسه باید تکرار شود.ولی در فیلتر فقط رکورد جدید بررسی می گردد.

rambod51
چهارشنبه 13 خرداد 1383, 23:01 عصر
با سلام
منون از راهنماییتون اگه فیلتر مشکل نداره پس میرم سراغش
:gift: :flower: :تشویق: