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

Вниз

Добавление записи в Oracle   Найти похожие ветки 

 
David   (2003-02-06 15:39) [0]

Есть простая таблица с одним полем типа Number. При добавлении записи динамическим SQL параметрами возникает исключительная ситуация. Код программы:

with SqlQuery do begin
SQL.Clear;
SQL.Add("INSERT INTO testlog (logid) VALUES (:idval)");

Params.Clear;
Params.CreateParam(ftInteger, "idval", ptInput);
Params.ParamByName("idval").Value := 1;

try
ExecSQL();
except
........
end;
end;

Если добавляю запись с переменной типа String в таблицу с полем типа Char, то все проходит нормально. Заранее благодарен за любые советы.


 
Reindeer Moss Eater   (2003-02-06 15:43) [1]

with SqlQuery do begin
SQL.Clear;
SQL.Add("INSERT INTO testlog (logid) VALUES (:idval)");
ParamByName("idval").Value := 1;
try
ExecSQL();
except
........
end;
end;


 
Danilka   (2003-02-06 16:01) [2]

with SqlQuery do begin
SQL.text:="INSERT INTO testlog (logid) VALUES ("+inttostr(1)+")";
try
ExecSQL();
except
........
end;
end;


 
Duce   (2003-02-06 16:16) [3]

пРОДОЛЖАЯ Данилку ;)

Так, по-моему, и вернее и быстрее и легче будет - динамически
собирать полную строку СКЛ...если ситуация позволяет.


 
David   (2003-02-06 16:17) [4]

Если написать без параметров как Danilka, то все работает, но хотелось бы знать как реализовать параметрический SQL. К сожалению, вариант Reindeer Moss Eater тоже не функционирует.


 
Reindeer Moss Eater   (2003-02-06 16:20) [5]

К сожалению никто из не знает что такое у тебя SqlQuery


 
dimis   (2003-02-06 16:25) [6]


> Reindeer Moss Eater (06.02.03 16:20)
> К сожалению никто из не знает что такое у тебя SqlQuery

и что за ошибка


 
David   (2003-02-06 16:38) [7]

Прошу прощения. SqlQuery имеет тип TSQLQuery. Я использую dbExpress. Ошибка: Invalid field type.


 
Reindeer Moss Eater   (2003-02-06 16:47) [8]

Сдается мне, что параметрический запрос заработал, и в ошибке виноват не он


 
passm   (2003-02-06 16:55) [9]

Тип указан?
ParamByName("idval").DataType:= ...
ParamByName("idval").Value:= ...


 
David   (2003-02-06 17:06) [10]

Одинаково не работает и с указанием типа
ParamByName("idval").DataType := ftInteger и без указания. Я тоже склоняюсь к тому, что причина не в SQL, т.к. с Paradox все работает без проблем.


 
Sergey13   (2003-02-07 09:30) [11]

2David (06.02.03 16:38)
>Ошибка: Invalid field type.
Так это делфовая ошибка или оракловая вываливается?

2Duce © (06.02.03 16:16)
>Так, по-моему, и вернее и быстрее и легче будет - динамически
собирать полную строку СКЛ...если ситуация позволяет.

Это тебе проще, а серверу труднее. 8-(


 
Danilka   (2003-02-07 10:06) [12]

Sergey13 © (07.02.03 09:30)
>Это тебе проще, а серверу труднее. 8-(

серьезно?
интересно, почему ему сразу получить и обработать полноценный скуль труднее, чем получить сначала его урезаную версию, как-бы сообщение, типа, "извиняйте, что не сказала вам все сразу чего от вас хотела. а сейчас я вам еще буду параметры по-очереди отдавать", потом получить параметры, а потом уже обработать все это одной кучей?


 
Johnny Smith   (2003-02-07 10:15) [13]

2Danilka © (07.02.03 10:06)
Так вот, докладываю: после того, как ты передал запрос на сервер, он там компилируется.
Если есть параметры, то при повторном вызове запроса он НЕ ПЕРЕКОМПИЛИРУЕТСЯ, а просто ставит значения параметров в готовый скомпиленный запрос.
Если же передавать текст запроса каждый раз по-новому, то он каждый раз будет компилироваться, т.е. это - просто-напросто излишняя нагрузка на сервер.


 
Sergey13   (2003-02-07 10:18) [14]

2Danilka © (07.02.03 10:06)
>серьезно?
Абсолютно. Если этот запрос работает много раз, то при склеивании SQLпредложения сервер каждый раз проверяет его и компилит. А в случае с переменными он просто биндует их и выполняет. Т.е. исключается парсинг.


 
Danilka   (2003-02-07 10:26) [15]

Johnny Smith © (07.02.03 10:15)
Sergey13 © (07.02.03 10:18)
:))
все ясно.
правда, парсинг такого запроса займет времени гораздо меньше, чем лишнее "общение" клиента с сервером.


 
Sergey13   (2003-02-07 10:45) [16]

2Danilka © (07.02.03 10:26)
>правда, парсинг такого запроса займет времени гораздо меньше, чем лишнее "общение" клиента с сервером.
Одного может быть. А если этот запрос отрабатывает несколько раз в секунду (там что то про LOG было вроде) - тогда ого-го сколько отожрет. Кроме того, каждый такой "новый" запрос отожрет несколько памяти в шаредпуле. Это конечно не очень страшно, но и хорошего тоже мало. Может выкидывать от туда действительно нужные запросы.


 
David   (2003-02-07 11:20) [17]

2Sergey13
Если быть точным, то ошибка dbExpress, но это может быть реакцией на ошибку, которая произошла в Oracle. Не понимаю, почему это происходит с цифровыми параметрами, а со строковыми все в порядке?
2Danilka
Таблица, в которую заносятся данные, в самом деле, является как-бы логом с довольно большой нагрузкой. Кроме того, функции общения с БД вынесены в отдельную библиотеку, которая пишется под конкретную БД (Oracle, Paradox, ...). Основная программа, таким образом, от БД не зависит, ее дело только сформировать SQL и передать его с параметрами дальше. Поэтому и запрос параметрический.


 
Sergey13   (2003-02-07 11:33) [18]

2David (07.02.03 11:20)
Попробуй отработать этот запрос в чем нибудь другом, хоть в плюсе, или ПЛ/СКЛ Дивелопере. С именами схем не может быть проблем? Убери try except -пусть прога ругнется по настоящему. 8-) Какой то код у ошибки должен быть, и на этот код какое то описание наверно существует.



 
David   (2003-02-07 11:44) [19]

Невероятно, но факт. Если параметр определить как строковый, т.е.
Params.ParamByName("idval").DataType := ftString;
Params.ParamByName("idval").Value := 1;
то все работает. Кто бы мог подумать. Что касается сообщения, то оно такое и есть: dbExpress error: Invalid field type. Может у dbExpress свои типы для параметров?



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

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

Наверх





Память: 0.49 MB
Время: 0.01 c
1-75872
tva
2003-02-13 13:45
2003.02.24
Как читать из класса TXMLDocument ?


1-75946
happyboy
2003-02-11 18:31
2003.02.24
PopupMenu и спец. фонты


6-76062
DJ_Sedoy
2003-01-06 23:17
2003.02.24
Indy


1-75915
Dunkan
2003-02-14 14:42
2003.02.24
Сохранение исходника интернет страницы...


1-75933
Serhij H.
2003-02-14 18:12
2003.02.24
TNMHTTP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский