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

Вниз

SELECT не работает   Найти похожие ветки 

 
Аня   (2003-07-18 08:36) [0]

Помогите!!! Переношу информацию из текстового файла в базу, при этом добавляется два вычисляемых поля, т.е. последовательность запросов в цикле по строкам файла такая: SELECT, SELECT, INSERT. В таком виде программа работает только на 764 строки, но работает правильно. Если закоментарить один из селектов, всё равно какой, то переносятся 1528 строк. А если убрать оба селекта, тогда всё работает до конца файла, но конечно же без вычисляемых полей. Ошибка выдаётся "Invalid parameter." Что за ерунда?


 
Наталия   (2003-07-18 08:40) [1]

Код покажи.


 
ЮЮ   (2003-07-18 08:41) [2]

И что, приведенный текст можно рассматривать как исходник и пытаться найти ошибку? Или ты просто поделилась впечатлениями и хочешь, чтобы тебя подалели?


 
Аня   (2003-07-18 08:53) [3]

Жалеть не надо. Объяснил бы кто-нибудь начинающей...
А кусочек кода вот:

qOp.Close;
qOp.SQL.Clear;
qOp.SQL.Add("SELECT ID FROM OPERATORS WHERE TRUNC="+""""+tin+"""");
qOp.Open;
opin:=qOp.FieldValues["id"];
qOp.Close;
qOp.SQL.Clear;
qOp.SQL.Add("SELECT ID FROM OPERATORS WHERE TRUNC="+""""+tout+"""");
qOp.Open;
opout:=qOp.FieldValues["id"];
qInsert.Close;
qInsert.SQL.Clear;
qInsert.SQL.Add("INSERT INTO BILLING VALUES");
qInsert.SQL.Add("("+""""+d+""""+","+""""+t+""""+","+""""+ani+""""+","+""""+tin+""""+","+""""+dial+""""+","+""""+tout+""""+","+""""+du+""""+","+""""+pin+""""+")");
qInsert.SQL.Add(","+""""+opin+""""+","+""""+opout+""""+")");
qInsert.ExecSQL;


Самое интересное, что если в цикле оставить один селект и вместо переменной поставить конкретное значение, то ошибка всё равно появляется на 1528 раз выполнения цикла.


 
Наталия   (2003-07-18 09:00) [4]

Типы полей соответствуют вставляемым значениям?


 
Johnmen   (2003-07-18 09:06) [5]

Видимо, по одному из селектов ничего не возвращается на 1528 шаге при текущих значениях tin или tout...


 
ЮЮ   (2003-07-18 09:10) [6]

Честно говоря, не вижу не одной строчки, которая бы вызывала "Invalid parameter.". Если только в переменных d,t,...,opout вдруг оказался текст, содержащий символ :
Поставь проверку
if Pos(":", qInsert.SQL.Text) > 0 then
Raise Exception.Create(qInsert.SQL.Text)
else
qInsert.ExecSQL;



 
Аня   (2003-07-18 09:13) [7]

Типы полей соответствуют, иначе как бы первые 1528 или 764 раза всё правильно сработало бы...
Ещё повторю, если написать:

for i:=1 to 1000 do
begin
qOp.Close;
qOp.SQL.Clear;
qOp.SQL.Add("SELECT ID FROM OPERATORS WHERE TRUNC="+""""+"810"+"""");
qOp.Open;
end;


то тоже отрабатывает только 1528 раз. Что это за фигня?


 
ЮЮ   (2003-07-18 09:17) [8]

>for i:=1 to 1000 do
>то тоже отрабатывает только 1528 раз

Точно фигня! Не должно болеше 1000 раза :-)


 
Ann   (2003-07-18 09:20) [9]


> ЮЮ © (18.07.03 09:17)
> Точно фигня! Не должно болеше 1000 раза :-)

полностью согласна! :)


 
ЮЮ   (2003-07-18 09:24) [10]

>полностью согласна! :)
откуда же взялось это 1528 ?


 
Аня   (2003-07-18 09:25) [11]

Извиняюсь, 10000.

А что, символ ":" как-то влияет на выполнение запроса? Тем более, если убрать все селекты, переменные opin и opout и соответствующие им поля, то всё работает правильно...


 
ЮЮ   (2003-07-18 09:32) [12]

>А что, символ ":" как-то влияет на выполнение запроса?
Запрос становится "параметризованным"

Лучше самой сделать действительно параметризованный запрос: и работать будет быстрее и лишних ошибок избежишь
До цикла:

qInsert.SQL.Clear;
qInsert.SQL.Add("INSERT INTO BILLING VALUES");
qInsert.SQL.Add("( :d,:t, :ani, :tin, :dial, :tout, :du, :pin)");
qInsert.Prepare;


в цикле

qInsert.Params[0].asString := d;
...
qInsert.Params[7].asString := pin;
qInsert.ExecSQL;





 
Ann   (2003-07-18 09:32) [13]


> ЮЮ © (18.07.03 09:24)
> >полностью согласна! :)
> откуда же взялось это 1528 ?

это не я запостила.. :)
просто тезки..


 
ЮЮ   (2003-07-18 09:40) [14]

Хотя то, что "Запрос становится "параметризованным" - это наверноя я через край хватил, но наличие символа " в любой переменной точно превратит твой запрос в ерунду


 
Аня   (2003-07-18 09:41) [15]

Спасибо за разъяснения по поводу двоеточия. Попробую переделать.
Но проблема всё-таки в селекте. Он не хочет работать более 1528 раз, даже когда нет в нём никакой привязки к переменным...


 
ЮЮ   (2003-07-18 09:48) [16]

Посмотри нет ли каких обработчиков у qOp. Может причина кроется где-то там. Ведт не случайно падает на одном и том же числе


 
ЮЮ   (2003-07-18 09:55) [17]

В конце-концов, поставь break point для i = 1528 и посмотри где падает


 
Соловьев   (2003-07-18 10:00) [18]


> Аня (18.07.03 09:13)

смысл этого цыкла?


 
VAleksey   (2003-07-18 10:52) [19]

Эта.. Ты вот чего, try except умеешь пользоваться?
Так вот в блоке
Excep
End;
Сохрани куда - нибудь текст запроса и посмотри его.. и нам потом дай посмотреть.


 
Аня   (2003-07-18 12:59) [20]

Спасибо всем, но ничего не помогло. Как ни странно, поменяв базу данных (благо нахожусь в самом начале большого процесса программирования)на PostgreSQL на удалённой машине, этот же код заработал в полную силу. Видимо, Paradox кривой...


 
ЮЮ   (2003-07-18 13:04) [21]

Может Paradox слишко близко и не поспевал за тобой в цикле перекраивать TQuery? Попробуй его тоже заменить на параметрический с Prepare, а затем уж гнать в бешенном цикле.


 
VAleksey   (2003-07-18 13:21) [22]

Мда...

> Видимо, Paradox кривой...

Нечего на зеркало пенять ... ;-)

ЗЫ
Господа, ну прекратите наконец винить в своих ошибках Windows, Borland, Paradox и т.д. !!!
ЗЗЫ
Сорри за эмоции. Просто надо разбираться что к чему. А если у тебя на PostgreSQL будет какая - нибудь ошибка, то что ты будешь делать? Видимо переходить на Oracle ...



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

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

Наверх





Память: 0.49 MB
Время: 0.008 c
3-33076
TankMan
2003-07-13 02:34
2003.08.11
Проблема хранения....


1-33137
Dolf
2003-07-26 22:03
2003.08.11
Ошибка EAccessViolation


14-33301
Степан Петрович
2003-07-17 16:27
2003.08.11
Организация компьютерной бухгалтерии


1-33177
$Hic0
2003-07-28 17:10
2003.08.11
ClientToScreen;


1-33166
KSergey
2003-07-28 14:27
2003.08.11
По поводу TInplaceEdit в TCustomGrid





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