ورود

View Full Version : سوال: در مورد ADOQUERy



سیروس مقصودی
دوشنبه 07 مرداد 1387, 09:29 صبح
با سلام
من از طریق ADO به پایگاه اطلاعاتی Oracle وصل شده ام و در AdoQuery این select را نوشته ام


SELECT S.*,
B.BILL_NO,B.BILL_NO billno,B.BILL_TYPE,B.BILL_STAT,B.PENT,B.DEBT_AMNT, NVL(B.OTHR_DEBT,0) OTHR_DEBT,
B.TOTL_AMNT,B.TV_AMNT,B.DUTY_AMNT,NVL(B.DMND_AMNT, 0)+NVL(B.SUBS_AMNT,0) DMND_AMNT,
B.PEAK_AMNT,B.LIGT_AMNT,B.MIN_AMNT,B.MNTC_COST,B.C YCL_AMNT,B.REM_RIAL,B.METR_DEBT,B.DWPY_AMNT,
B.MIN_STAT,substr(B.EXP_DATE,3,8) EXP_DATE,substr(B.ISSU_DATE,3,8) ISSU_DATE,
Substr(B.PRVS_DATE,3,8) PRVS_DATE,SUBSTR(B.CRNT_DATE,3,8) CRNT_DATE,B.NUMB_OF_DAY,
B.POWR_COEF,B.MAXI_READ,B.LOSS_COEF,B.CALC_DMND,B. READ_DMND,SUBSTR(B.TIME_PLAN_YEAR,3,2) TIME_PLAN_YEAR,
Substr(B.TIME_PLAN_YEAR,3,2) TIME_PLAN_YEAR1,B.TIME_CYCL,B.PRCD_CODE,C.BMTF_BMS P_SEQ1,C.CYCL_AVER,
Substr(BASE_METER_SPEC.INST_DATE,3,8) INST_DATE,BASE_METER_SPEC.PHAS ,BASE_METER_SPEC.AMPR ,BASE_METER_SPEC.COEF ,
BASE_METER_SPEC.CNTR_DMND ,BASE_METER_SPEC.HORS_POWR ,BASE_METER_SPEC.ACTV_NUMB_DIGT ,BASE_METER_SPEC.RACT_NUMB_DIGT ,
BASE_METER_SPEC.TARF_CODE
FROM SERVICE S,BILL B,CONSUMPTION C,BASE_METER_SPEC,PREVENT_CODE
WHERE S.FILE_NO = B.SERV_FILE_NO AND B.SERV_FILE_NO = C.BILL_SERV_FILE_NO
AND B.BILL_NO = C.BILL_BILL_NO AND C.BMTF_METR_TARF_TYPE = '1'
AND BASE_METER_SPEC.SERV_FILE_NO = S.FILE_NO AND BASE_METER_SPEC.SEQ1 = C.BMTF_BMSP_SEQ1
AND S.SERV_STAT = '2' AND S.SERV_TAG< = '07'
AND S.SERV_TYPE = '1' AND S.REGN_CODE = '30'
AND B.TIME_PLAN_YEAR = '1387'
AND S.WORK_DAY BETWEEN '01' AND '02'
AND S.AGNT_CODE BETWEEN '01' AND '02'
AND B.TIME_CYCL = '01'
AND B.BILL_STAT > '3' AND B.BILL_STAT <> '8'
AND B.BILL_TYPE IN ('1','2') AND B.PRCD_CODE = PREVENT_CODE.CODE '
AND PREVENT_CODE.ACT_CODE <> '4'


ولی هنگام active کردن query پیغام SQL COMMAND NOT PROPERLY ENDED ظاهر میشود .

منظور از این پیغام چیست ؟ وآیا در نوشتن Query در AdoQuery محدودیت وجود دارد ؟
لطفا مرا راهنمائی فرمائید .

با تشکر ...

mms_4004
دوشنبه 07 مرداد 1387, 10:17 صبح
توصیه می کنم از تگ کد برای نوشتن کدهای SQL استفاده کنید چون به صورت معمولی کدها خیلی زیادن وای به حاله اینکه نا مرتب هم باشن، کسی حوصله نمی کنه اینارو بخونه، البته این یه پیشنهاده.

Hsimple11
دوشنبه 07 مرداد 1387, 12:10 عصر
فرمت بندی دستوراتتان مشکل دارد.

سیروس مقصودی
دوشنبه 07 مرداد 1387, 13:09 عصر
لازم به توضیح است وقتی این کد را مینوسم مشکلی پیش نمی آید وراحت اجرا میشود


[CODE]
SELECT S.*,
B.BILL_NO,B.BILL_NO billno,B.BILL_TYPE,B.BILL_STAT,B.PENT,B.DEBT_AMNT, NVL(B.OTHR_DEBT,0) OTHR_DEBT,
B.TOTL_AMNT,B.TV_AMNT,B.DUTY_AMNT,NVL(B.DMND_AMNT, 0)+NVL(B.SUBS_AMNT,0) DMND_AMNT,
B.PEAK_AMNT,B.LIGT_AMNT,B.MIN_AMNT,B.MNTC_COST,B.C YCL_AMNT,B.REM_RIAL,B.METR_DEBT,B.DWPY_AMNT,
B.MIN_STAT,substr(B.EXP_DATE,3,8) EXP_DATE,substr(B.ISSU_DATE,3,8) ISSU_DATE,
Substr(B.PRVS_DATE,3,8) PRVS_DATE,SUBSTR(B.CRNT_DATE,3,8) CRNT_DATE,B.NUMB_OF_DAY,
B.POWR_COEF,B.MAXI_READ,B.LOSS_COEF,B.CALC_DMND,B. READ_DMND,SUBSTR(B.TIME_PLAN_YEAR,3,2) TIME_PLAN_YEAR,
Substr(B.TIME_PLAN_YEAR,3,2) TIME_PLAN_YEAR1,B.TIME_CYCL,B.PRCD_CODE,C.BMTF_BMS P_SEQ1,C.CYCL_AVER,
Substr(BASE_METER_SPEC.INST_DATE,3,8) INST_DATE,BASE_METER_SPEC.PHAS ,BASE_METER_SPEC.AMPR ,BASE_METER_SPEC.COEF ,
BASE_METER_SPEC.CNTR_DMND ,BASE_METER_SPEC.HORS_POWR ,BASE_METER_SPEC.ACTV_NUMB_DIGT ,BASE_METER_SPEC.RACT_NUMB_DIGT ,
BASE_METER_SPEC.TARF_CODE
FROM SERVICE S,BILL B,CONSUMPTION C,BASE_METER_SPEC,PREVENT_CODE
WHERE S.FILE_NO = B.SERV_FILE_NO AND B.SERV_FILE_NO = C.BILL_SERV_FILE_NO
AND B.BILL_NO = C.BILL_BILL_NO AND C.BMTF_METR_TARF_TYPE = '1'
AND BASE_METER_SPEC.SERV_FILE_NO = S.FILE_NO AND BASE_METER_SPEC.SEQ1 = C.BMTF_BMSP_SEQ1
AND S.SERV_STAT = '2' AND S.SERV_TAG< = '07'
'AND S.SERV_TYPE = '1' AND S.REGN_CODE = '30'


ولی وقتی این کد را به آن اضافه میکنم



AND B.TIME_PLAN_YEAR = '1387'
AND S.WORK_DAY BETWEEN '01' AND '02'
AND S.AGNT_CODE BETWEEN '01' AND '02'
AND B.TIME_CYCL = '01'
AND B.BILL_STAT > '3' AND B.BILL_STAT <> '8'
AND B.BILL_TYPE IN ('1','2') AND B.PRCD_CODE = PREVENT_CODE.CODE '
AND PREVENT_CODE.ACT_CODE <> '4'


پیغام SQL COMMAND NOT PROPERLY ENDED ظاهر میشود . و لازم به توضیح است که همین Select
در Sql Plus مربوط به Oracle براحتی اجرا میشود . آیا در AdoQuery مربوط به Delphi محدویت سطر و ستون
وجود دارد ؟

لطفا مرا راهنمائی نمائید .

با تشکر فراوان

SYNDROME
دوشنبه 07 مرداد 1387, 17:05 عصر
بهتر است قبل از Open کردن مقدار SQL.Text را بگیری و در خود بانکتان تست کنید.
اینجوری سرعت عمل تست دستورات بالا می رود.
موفق باشید

اصغر (پآچ)
دوشنبه 07 مرداد 1387, 20:27 عصر
سلام دوست من

AdoQuery محدودیت سطر و کاراکتر داره بهتره این دستوراتت رو توی چند خط بشکنی شاید به جواب برسی

موفق و موید باشی