Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SELECT не работает [D6, Paradox]


Страницы:   1 2

Аня ©   (2003-07-18 08:36:00) 

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


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

Мда...

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

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

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


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

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


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

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


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

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


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


> Аня (18.07.03 09:13)

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


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

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


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

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


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

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


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

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


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

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

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

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:00) [11]


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

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


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

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

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


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

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


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


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

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


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

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

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


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

Типы полей соответствуют, иначе как бы первые 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:10:00) [17]

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


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

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


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

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


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

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

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 раз выполнения цикла.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо