Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Ошибка Invalid Parameter!!! (http://forum.oszone.net/showthread.php?t=185428)

LilLoco 14-09-2010 14:45 1495131

Ошибка Invalid Parameter!!!
 
Люди, помогите пожалуйста!Выскакивает ошибка Invalid Parameter при выполнении запроса выбора данных!приблизительный код :

Код:

query1.Close;
query1.SQL.Add(тут что то выбираем);
query1.open;
//выполняем цикл по всему выбранному
while not query1.eof do
begin
      ........................... //что нибудь делаем
      query2.close;
      query2.SQL.Add('SELECT A FROM " ' + dir + ' " where B = 100 ')
 (*)  query2.open;
      ....................      //что нибудь делаем
      query2.close;
      ...........................//что нибудь делаем
      query1.next;
end;

при выполнении данного куска, на строке (*) вылетает ошибка!
dir - константа,указывающая таблицу!

Код:

const dir : string = 'D:\aaa.dbf';
Но вот ищо один момент, если в строке (*), в запрос вбить все не используя переменные и константы :

Код:

query2.SQL.Add('SELECT A FROM "  D:\aaa.dbf " where B = 100 ')
то все хорошо обрабатывается, и никаких ошибок! в чем причина этого???раньше такого не было в других кусках кода, почти идентичных этому!

посмотрел строку sql - запроса перед его выполнением, она почему то имеет такой вид :


Код:

'SELECT A FROM "" WHERE B = 100'#$D#$A

Alan85 14-09-2010 21:45 1495418

попробуй так:
query2.SQL.Add(Format('SELECT A FROM " %s " where B = 100 ', [dir]);

LilLoco 15-09-2010 07:45 1495626

Alan85, Спасибо за вариант, но с ним тоже, увы, строка запроса имеет такой же вид, и запрос не выполняется :(

SoundHorror 15-09-2010 13:36 1495857

1. Попробуйте задавать ваш dir сразу с двойными кавычками

Код:

const dir = ' "D:\aaa.dbf" '
Тогда будет так:
Код:

query2.SQL.Add('SELECT A FROM '+dir+' where B = 100 ')
2. Если перед выполнением запроса Вы видите это:
Код:

'SELECT A FROM "" WHERE B = 100'#$D#$A
то возвожно Вы определили где-то локальную переменную dir и перекрыли ей константу. Именно в этом случае получите 'invalid parameter'
Если объявляли константу с двойными кавычками сразу, то получите другое сообщение об ошибке.

SoundHorror 15-09-2010 14:04 1495885

Вложений: 1
Вот пример перекрытия константы.

LilLoco 15-09-2010 15:02 1495945

Цитата:

Цитата SoundHorror
то возвожно Вы определили где-то локальную переменную dir и перекрыли ей константу. Именно в этом случае получите 'invalid parameter' »

Это проверил первым же делом, таких совпадений не нашел!!!
Попробовал, сообщение Invalid Use of keyword WHERE....!запрос выглядит так :

Код:

'SELECT A FROM  WHERE B = 100'#$D#$A
Почему то строка запроса вообще не воспринимает констант и переменных!даже если делать так :

Код:

B := '100' //переменная типа string
query2.SQL.Add('SELECT A FROM " ' + dir + ' " WHERE B = ' + B);

то вид имеет такой :

Код:

'SELECT A FROM " " WHERE B = '#$D#$A
и даже если так :

Код:

strQuery := 'SELECT A FROM "D:\aaa.dbf" WHERE B = 100';
query2.SQL.Add(strQuery);

строка подключения вообще пустая!

SoundHorror 15-09-2010 15:19 1495958

Вложений: 1
выложите свой код, и версию среды укажите. Query стандартный от BDE? Этот пример (см.вложние) у Вас работает?

SoundHorror 15-09-2010 15:52 1495989

Есть еще одна бредовая мысль, но ввиду отсутствия других вариантов я ее выскажу:
Может в каком-нибудь используемом модуле переопределен тип String так чтобы длина постоянно была равна нулю?

LilLoco 15-09-2010 16:04 1495997

Цитата:

Цитата SoundHorror
Может в каком-нибудь используемом модуле переопределен тип String так чтобы длина постоянно была равна нулю? »

Нет такого нет ничего!

Работает все почему то кроме этого куска кода!
Вот что еще оказывается :

в этом куске кода query2 создается программно! попробовал добавить на форму Query( Query3), и поменял query2 на query3, все нормально обрабатывается и выполняется!Может ли это быть каким либо багом?Еще люди советуют перезагрузить комп, может ли это влиять? :dont-know
З.Ы. Комп работает уже дня 3 - 4, и среда тоже!

SoundHorror 15-09-2010 16:15 1496001

Дайте же посмотреть этот кусок кода от места где Query2 создается программно до его открытия. Может там чего и намудрили? Чудес в коде не бывает.

LilLoco 15-09-2010 16:29 1496005

Код:

query := TQuery.Create(nil);
  query2 := TQuery.Create(nil);
  opentable2(table,TEMP_PROMBASE);
  SelectWhere(query,'DISTINCT*',TKMEH,'zakaz = ' + zakaz + ' and xkb59 = "' + detal + '"');
  while not query.Eof do
  begin
    table.Insert;
    table.FieldByName('zakaz').AsString := query.FieldByName('zakaz').AsString;
    table.FieldByName('detal').AsString := query.FieldByName('xkb59').AsString;
    table.FieldByName('kolvo').AsString := IntToStr(Count);
    table.FieldByName('oper').AsString := query.FieldByName('noper').AsString;
    table.FieldByName('cex').AsString := Copy(query.FieldByName('zehus').AsString,0,2);
    shifr := query.FieldByName('xko99').AsString;
    table.FieldByName('shifr').AsString := shifr;
    if ((Length(shifr) = 2) or (Length(shifr) = 3)) then
    begin
      table.FieldByName('norma').AsString := query.FieldByName('norma').AsString;
      query2.Close;
      query2.SQL.Clear;
      query2.SQL.Add('SELECT DISTINCT KPZV FROM "' + PZV + '" WHERE KODOB = ' + shifr);
      query2.Open;    //ошибка на этой строчке
      table.FieldByName('pzv').AsString := query2.FieldByName('KPZV').AsString;
      query2.Close;
      ..............................

Вот кусок кода :)))

Alan85 15-09-2010 17:30 1496036

а если так:
Код:

query2.SQL.Add('SELECT DISTINCT KPZV FROM "' + PZV + '");

query2.SQL.Add('WHERE KODOB = ' + shifr);


SoundHorror 15-09-2010 17:55 1496049

Это должно работать. У меня работает. Больше вариантов нету. Но появился вопрос. Если у меня есть запрос, в котором 60 параметров, и на этапе выполнения ExecSql я получаю ошибку - invalid parameter, то как мне узнать какой именно параметр не в порядке?

LilLoco 16-09-2010 07:33 1496424

Alan85, тоже не помогает!

Дело еще, оказывается, в том, что этот код не работает на определенном компе, пробовал на других все работает отлично!и вдобавок, не работает тока с созданными в коде query!пока что заменил на query, добавленный визуально, но все равно буду разбираться дальше!всем большое спасибо, за помощь!


Время: 16:24.

Время: 16:24.
© OSzone.net 2001-