Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.11;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
1-33118
dmitry99
2003-07-30 05:31
2003.08.11
В дизайнере RAVE 5.0 не удается сохранить проект отчета (.rav)


1-33128
Last
2003-07-30 11:38
2003.08.11
Filter


1-33215
Bill
2003-07-29 13:53
2003.08.11
Работа с файлом output


1-33107
Fider58
2003-07-28 22:57
2003.08.11
Где лучше писать код: в обработчиках или в своих подрограммах


3-33066
steelpunk
2003-07-17 17:10
2003.08.11
В DbGrid вместо русских букв диез(#)