Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > TADOQuery: ошибка записи параметров


Автор: shooroop 4.5.2005, 15:12
Help!!! Горю с дипломом!!!

Работаю с таблицами Paradox
В дизайне в ADOQuery1.SQL пишу:
Select Q1, Q2 from voprosi where Q12=:OBRAZOVANIE

потом програмно записываю значение в этот параметр:
ADOQuery1.Parameters.ParamByName('OBRAZOVANIE').Value.AsString:= ComboBox1.Text;

но при этом появляется ошибка!: Class EOleError with message 'Variant doesnot reference anautomation object' smile
В чем дело,блин smile !!!

Автор: AntonSaburov 4.5.2005, 15:24
Попробуй просто

ADOQuery1.Parameters.ParamByName('OBRAZOVANIE').Value := ComboBo1.Text;

Автор: Bes 4.5.2005, 15:52
или
ADOQuery1.Parameters[0].Value := ComboBo1.Text;

Автор: Guest 5.5.2005, 09:42
Спасибо! Но, параметры вроде записываются но при открытии ADOQuery1 постоянно вылетает ошибка:

Parameter object is improperly defined. Inconsistent or incomplete information was provided.

Автор: shooroop 5.5.2005, 09:42
Спасибо! Но, параметры вроде записываются но при открытии ADOQuery1 постоянно вылетает ошибка:

Parameter object is improperly defined. Inconsistent or incomplete information was provided.

Автор: Bes 5.5.2005, 13:00
Приведи весь код, как открываешь? и добавлял ли ты поля в сам квери (двойной щелчек на компоненте)

Автор: shooroop 5.5.2005, 13:22
При добавлении полей в квери вылетает та же ошибка:
Parameter object is improperly defined. Inconsistent or incomplete information was provided. smile


А код такой:

Код

with DMBD.AdoQuery1 do
   begin
     Close;
     DMBD.AdoQuery1.Parameters.ParseSQL(DMBD.Zapros.SQL.Text, true);
     DMBD.AdoQuery1.Parameters.ParamByName('OBRAZOVANIE').Value:= ComboBox1.Text;
     DMBD.AdoQuery1.Parameters.ParamByName('STAJ').Value:=ComboBox2.Text;
     DMBD.AdoQuery1.Parameters.ParamByName('PERSONAL').Value:=ComboBox3.Text;
     DMBD.AdoQuery1.Parameters.ParamByName('VOZR1').Value:=SpinEdit1.Value;
     DMBD.AdoQuery1.Parameters.ParamByName('VOZR2').Value:=SpinEdit2.Value;

     if ftMuj.Checked then
                      DMBD.AdoQuery1.Parameters.ParamByName('POL').Value:=true
                      else
                      DMBD.AdoQuery1.Parameters.ParamByName('POL').Value:=false;
     Open;
     end;

Автор: Bes 5.5.2005, 15:06
Е-мое! Еее-мое!
Давай так

Код

with DMBD do
begin
     AdoQuery1.active:=false;

     AdoQuery1.sql.text:='Текст твоего запроса :праметр0 ляляля :параметр1 лялялялля и т.п.';
     AdoQuery1.Parameters[0].value:=ComboBox1.Text;
     AdoQuery1.Parameters[1].value:=ComboBox2.Text;
     AdoQuery1.Parameters[2].value:=ComboBox3.Text;
     AdoQuery1.Parameters[3].value:=SpinEdit1.Value;
     AdoQuery1.Parameters[4].value:=SpinEdit2.Value;
     AdoQuery1.Parameters[5].value:=ftMuj.Checked;

     AdoQuery1.active:=true;
end;

Автор: shooroop 5.5.2005, 15:42
При выполнении AdoQuery1.active:=true; выскакивает та же фигня:
Parameter object is improperly defined. Inconsistent or incomplete information was provided


Автор: Bes 5.5.2005, 15:46
Удали эту кверю и добавь на форму заново плюс кнопку в которую только этот код. больше ничего не добавляй/меняй. кстати, может у тебя проблема с ADOConnection?

Автор: shooroop 6.5.2005, 11:07
Слушай сделал так как ты сказал:
Код

procedure TForm_Filter.BitBtn1Click(Sender: TObject);
begin
with DMBD do
   begin
      Zapros.Active:=false;
       Zapros.sql.text:='Select Q1, Q2,Q3,Q4,Q5,Q6,Q7 from voprosi, anketi Where AnketaID=VoprosID AND    podrazd=:PODRAZDELENIE';
       
       Zapros.Parameters[0].Value:=ftPodrazd.Text;
       Zapros.Active:=true;
   end;
end;


Теперь другая ошибка:
[Microsoft] [Драйвер ODBC Paradox] Слишком мало параметров. Требуется 3.



Автор: Bes 6.5.2005, 13:39
отдели знак "=" пробелами

Автор: Guest 2.11.2005, 07:36
Вместо active:=false и active:=true лучше писать close и open

а перед Zapros.Parameters[0].Value:=ftPodrazd.Text; напиши
Zapros.Parameters.ParseSQL(Zapros.SQL.Text, True);

Автор: Bes 4.11.2005, 12:11
Цитата
Вместо active:=false и active:=true лучше писать close и open

а перед Zapros.Parameters[0].Value:=ftPodrazd.Text; напиши
Zapros.Parameters.ParseSQL(Zapros.SQL.Text, True);

незнаю, чем это лучше

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)