Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Вниз

Не кастуется поле, если текст запроса формируется в динамически   Найти похожие ветки 

 
KIR   (2004-08-23 17:47) [0]

Народ, ситуация след.

Пишу запрос, в котором среди прочего, есть стока типа

  CAST(SOMEVALUE AS NUMERIC(10,2))

В SQL-редакторе IB EXPERT"a все проходит без сучка...

Если же текст запроса формируется в динамически:

  ...
  With MyDS.SQLs.SelectSQL do
  begin
     Clear;
     Add("CAST(SOMEVALUE AS NUMERIC(10,2))");
  ...

То выдается ошибка:
"MyDS.SelectQuery: The insert, update, delete, ddl or authorization statement cannot be executed because the trasaction is inquiry only. Dynamic SQL Error. SQL error code = -187. Metadata update statement is not allowed by the current database SQL dialect 3."

Все это начало случаться, после того, как я перевел базу да 3-й диалект...

P.S. Использую FIBPlus, если это играет роль...


 
Sergey13 ©   (2004-08-23 17:50) [1]

А весь запрос каков?


 
KIR   (2004-08-23 17:54) [2]

Весь запрос (правда есть ли смысл?):

     With NaklArcDS.SQLs.SelectSQL do
     begin
        Clear;
        Add("SELECT");
        Add("M_NAKL.ID,");
        Add("M_NAKL.PARTNERID,");
        Add("IN_BILLS.NUMB AS IN_BILLS_SPR_NUMB,");
        Add("IN_BILLS.DAT AS IN_BILLS_SPR_DAT,");
        Add("IN_BILLS.PAYDAT,");
        Add("IN_BILLS.ID AS IN_BILLS_SPR_ID,");
        Add("M_NAKL.NUMB AS M_NAKL_SPR_NUMB,");
        Add("PARTNERS.PARTNAME,");
        Add("M_NAKL.DAT AS M_NAKL_SPR_DAT,");
        Add("M_NAKL.INDAT,");
        Add("M_NAKL.NAL,");
        Add("M_NAKL.DEL,");
//так не работает
        Add("SUM(CAST(D_NAKL.COST * (1+D_NAKL.NDS/100) AS NUMERIC(15,2)) * D_NAKL.KOLVO) AS SUMMA");
//а так работает
//         Add("SUM(D_NAKL.COST * (1+D_NAKL.NDS/100) * D_NAKL.KOLVO) AS SUMMA");
        Add("FROM");
        Add("M_NAKL LEFT OUTER JOIN IN_BILLS");
        Add("ON IN_BILLS.ID = M_NAKL.BILLID,");
        Add("PARTNERS,");
        Add("D_NAKL");
        Add("WHERE");
        Add("M_NAKL.PARTNERID = PARTNERS.ID");
        Add("AND");
        Add("M_NAKL.ID = D_NAKL.MASTERID");
        Add("AND");
        Add("((M_NAKL.DAT >= :BEGDAT");
        Add("AND");
        Add("M_NAKL.DAT <= :ENDDAT)");
        Add("OR");
        Add("(M_NAKL.DAT IS NULL))");
        Add("GROUP BY");
        Add("M_NAKL.ID,");
        Add("M_NAKL.PARTNERID,");
        Add("IN_BILLS.NUMB,");
        Add("IN_BILLS.DAT,");
        Add("IN_BILLS.PAYDAT,");
        Add("IN_BILLS.ID,");
        Add("M_NAKL.NUMB,");
        Add("PARTNERS.PARTNAME,");
        Add("M_NAKL.DAT,");
        Add("M_NAKL.INDAT,");
        Add("M_NAKL.NAL,");
        Add("M_NAKL.DEL");
        Add("ORDER BY");
        Add("M_NAKL.DAT DESC");
     end;


 
Sergey13 ©   (2004-08-23 18:00) [3]

Не понял чего ты кастуешь. Может так надо
Add("SUM(CAST(D_NAKL.COST * (1+D_NAKL.NDS/100) * D_NAKL.KOLVO) AS NUMERIC(15,2)) AS SUMMA");


 
KIR   (2004-08-23 18:04) [4]

Не-не-не, кастовать надо только первое произведение, я уже про это целую ветку развил:
http://delphimaster.net/view/3-1092909509/


 
KIR   (2004-08-23 18:05) [5]

Да и потом, я же говорю в IBExpert"e все работает, так что проблема не в том, что именно кастуется


 
Sergey13 ©   (2004-08-23 18:06) [6]

Тогда может так?
Add("SUM(D_NAKL.COST *CAST(1+D_NAKL.NDS/100) AS NUMERIC(15,2)) * D_NAKL.KOLVO) AS SUMMA");


 
KIR   (2004-08-23 18:08) [7]

Нет, нужно именно произведение. Еще раз говорю, проблема не в том, где пишется Cast, а в чем-то еще. Кстати, что такое "trasaction is inquiry only"?


 
Sergey13 ©   (2004-08-23 18:20) [8]

А если в дизайне запрос загнать в компонент?


 
KIR   (2004-08-23 18:24) [9]

Не проходит...


 
kaif ©   (2004-08-23 23:51) [10]

Я даже вникать не буду. CAST работает всегда в третьем диалекте. Хочешь запрос динамически конструируй, хочешь руками набирай. Ошибка в чем-то другом. Правда я работаю с IBX... Если компоненты FIBPlus делают какой-то свой парсинг - я молчу.


 
KIR   (2004-08-24 11:32) [11]

>kaif ©   (23.08.04 23:51) [10]

Можно и не вникать (я, кстати, для этого изначально только одну строчку и привел.

Но что это мистика? Из IBExpert"a все - ок, при формировании текста запроса динамически - вышеуказанная ошибка...


 
kaif ©   (2004-08-24 13:03) [12]

Вообще-то сначала нужно понять, чье это сообщение. Судя по тексту сообщения, дело здесь не в CAST вообще, а в том, как стартовала транзакция. Возможно это какой-то случай активизации какой-то фоновой транзакции, которая не вправе менять метаданные, изменять данные или еще что-то... В IBX сейчас такие транзакции не используются (транзакции с неявным стартом). Но я смутно припоминаю старую литературу, в которой говорилось, что такие транзакции в природе IB существуют и в них нельзя изменять данные, так как их нельзя корректно откатить. Они в старых версиях IBX стартовали, если просто оставить запрос на форме открытым. То есть если Query1.Open происходило до того, как вызвали Transaction1.StartTransaction явно.
 Мне почему-то кажется, что природа ошибки кроется где-то здесь, а не в синтаксисе. Проверь, как стартуют транзакции, нет ли вызовов Query.Open до StartTransaction, не остались ли открытыми (Active) какие-то компоненты запросов на формах или в модулях данных.
 В конце-концов можно временно упростить запрос до просто SELECT COUNT чтобы убедиться, что дело не в CAST или, наоборот, в CAST.


 
Johnmen ©   (2004-08-24 23:41) [13]

А ешё смысл указанного CAST совершенно не понятен...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.048 c
3-1093012058
Koala
2004-08-20 18:27
2004.09.19
sweep interval = ???


1-1094449360
Barsky
2004-09-06 09:42
2004.09.19
Хочу "окна в окне", как в ворде, фотошопе итд.. Как?


14-1093701087
Alex aka Kram
2004-08-28 17:51
2004.09.19
Памагите программеру продать прогу


1-1093967809
SMT
2004-08-31 19:56
2004.09.19
Самопроизвольное изменение размеров шрифта у компонентов формы


14-1093951550
}|{yk
2004-08-31 15:25
2004.09.19
Есть ли здесь любители FoxPro?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский