Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2013, 06:00   #1
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
Печаль

Доброе время суток программисты! Подскажите пожалуйста начинающему программисту как написать следующее:
у меня имеется запрос
Код:
procedure TMain.SpeedButton1Click(Sender: TObject);
begin
 ClientDataSet3.Close;
  SQLQ.Close;
  SQLQ.SQL.Clear;
  SQLQ.SQL.Add('SELECT DISTINCT req.REQUEST_NUMBER, RPO.CAD_NUMBER PREV_OBJ, RNO.CAD_NUMBER NEW_OBJ');
  SQLQ.SQL.Add('FROM REQUEST.REQUEST req');
  SQLQ.SQL.Add('LEFT JOIN REQUEST.REQUEST_PREV_OBJ rpo ON RPO.REQUEST_ID = req.id ');
  SQLQ.SQL.Add('LEFT JOIN REQUEST.REQUEST_NEW_OBJ rno ON RNO.REQUEST_ID = req.id ');
  SQLQ.SQL.Add('WHERE rpo.CAD_NUMBER IN '''+Edit1.Text+'''');
  SQLQ.SQL.Add('OR RNO.CAD_NUMBER IN '''+Edit1.Text+'''');
  SQLQ.Open;
  ClientDataSet3.Open;
   id1 := SQLQ.Fields[0].AsInteger;
  SQLQ.Close;
  SQLQ.SQL.Clear;
  SQLQ.SQL.Add( inttostr(id1));
  SQLQ.Open;
не могу понять как сделать, чтобы данные подставлялись не из Edit1, а через ListBox1 при условии что данные загружены в ListBox1

Попробовал сделать через Memo1, получилось следующее:
Код:
procedure TMain.SpeedButton1Click(Sender: TObject);
    var i:integer;
begin
   for I := 0 to Memo1.Lines.Count - 1 do
  begin
  ClientDataSet3.Close;
  SQLQ.Close;
  SQLQ.SQL.Clear;
  SQLQ.SQL.Add('SELECT DISTINCT req.REQUEST_NUMBER, RPO.CAD_NUMBER PREV_OBJ, RNO.CAD_NUMBER NEW_OBJ');
  SQLQ.SQL.Add('FROM REQUEST.REQUEST req');
  SQLQ.SQL.Add('LEFT JOIN REQUEST.REQUEST_PREV_OBJ rpo ON RPO.REQUEST_ID = req.id ');
  SQLQ.SQL.Add('LEFT JOIN REQUEST.REQUEST_NEW_OBJ rno ON RNO.REQUEST_ID = req.id ');
  SQLQ.SQL.Add('WHERE rpo.CAD_NUMBER IN '''+Memo1.Lines.Text+'''');
  SQLQ.SQL.Add('OR RNO.CAD_NUMBER IN '''+Memo1.Lines.Text+'''');
  end;
  SQLQ.Open;
  ClientDataSet3.Open;
   id1 := SQLQ.Fields[0].AsInteger;
  SQLQ.Close;
  SQLQ.SQL.Clear;
  SQLQ.SQL.Add( inttostr(id1));
  SQLQ.Open;
end;
но теперь выдает ошибку:
Изображения
Тип файла: jpg ошибка.jpg (11.7 Кб, 79 просмотров)

Последний раз редактировалось Stilet; 27.05.2013 в 08:17.
demon-sheff вне форума Ответить с цитированием
Старый 27.05.2013, 08:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Просто :'
Код:
 WHERE rpo.CAD_NUMBER IN '+Edit1.Text
Числа не окантовываются ковычками.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2013, 08:53   #3
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
Печаль

Сделал как вы сказали
Код:
 procedure TMain.SpeedButton1Click(Sender: TObject);
    var i:integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do
      begin
 ClientDataSet3.Close;
  SQLQ.Close;
  SQLQ.SQL.Clear;
  SQLQ.SQL.Add('SELECT DISTINCT req.REQUEST_NUMBER, RPO.CAD_NUMBER PREV_OBJ, RNO.CAD_NUMBER NEW_OBJ');
SQLQ.SQL.Add('FROM REQUEST.REQUEST req');
SQLQ.SQL.Add('LEFT JOIN REQUEST.REQUEST_PREV_OBJ rpo ON RPO.REQUEST_ID = req.id ');
SQLQ.SQL.Add('LEFT JOIN REQUEST.REQUEST_NEW_OBJ rno ON RNO.REQUEST_ID = req.id ');
  SQLQ.SQL.Add('WHERE rpo.CAD_NUMBER IN '+Memo1.Lines.Text);
  SQLQ.SQL.Add('OR RNO.CAD_NUMBER IN '+Memo1.Lines.Text);
end;
SQLQ.Open;
  ClientDataSet3.Open;
   id1 := SQLQ.Fields[0].AsInteger;
  SQLQ.Close;
  SQLQ.SQL.Clear;
  SQLQ.SQL.Add( inttostr(id1));
  SQLQ.Open;
end;
Выдает ошибку??? Что делать?
Изображения
Тип файла: jpg ошибка2.jpg (14.5 Кб, 86 просмотров)
demon-sheff вне форума Ответить с цитированием
Старый 27.05.2013, 08:59   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

IN имеет формат для числового поля ... IN (1,5,8,55,...)
для текстового поля ... IN ('1','fdc','45H',...)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.05.2013, 09:35   #5
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию

я так понял что надо вот так?
Код:
procedure TMain.SpeedButton1Click(Sender: TObject);
   var i:integer;
   a:string;
begin
  a:=Memo1.Lines.Text;
  for i := 0 to Memo1.Lines.Count - 1 do
  begin
  ClientDataSet3.Close;
  SQLQ.Close;
  SQLQ.SQL.Clear;
  SQLQ.SQL.Add('SELECT DISTINCT req.REQUEST_NUMBER, RPO.CAD_NUMBER PREV_OBJ, RNO.CAD_NUMBER NEW_OBJ');
  SQLQ.SQL.Add('FROM REQUEST.REQUEST req');
  SQLQ.SQL.Add('LEFT JOIN REQUEST.REQUEST_PREV_OBJ rpo ON RPO.REQUEST_ID = req.id ');
  SQLQ.SQL.Add('LEFT JOIN REQUEST.REQUEST_NEW_OBJ rno ON RNO.REQUEST_ID = req.id ');
  SQLQ.SQL.Add('WHERE rpo.CAD_NUMBER IN ''+a+''');
  SQLQ.SQL.Add('OR RNO.CAD_NUMBER IN ''+a+''');
  SQLQ.Open;
  ClientDataSet3.Open;
  id1 := SQLQ.Fields[0].AsInteger;
  SQLQ.Close;
  SQLQ.SQL.Clear;
  SQLQ.SQL.Add( inttostr(id1));
  SQLQ.Open;
  end;
end;
тогда в этом случае выдает предыдущую ошибку ''''is not a valid integer value.
demon-sheff вне форума Ответить с цитированием
Старый 27.05.2013, 09:48   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Читай раз 100 #4 и хорошо подумай
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.05.2013, 11:54   #7
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Читай раз 100 #4 и хорошо подумай
Прочитал, подумал, решил так:
Код:
  SQLQ.SQL.Add('WHERE rpo.CAD_NUMBER IN ''+'a'+''');
  SQLQ.SQL.Add('OR RNO.CAD_NUMBER IN ''+'a'+''');
не помогло
demon-sheff вне форума Ответить с цитированием
Старый 27.05.2013, 12:02   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А вот возьми посмотри, что в a находится и сравни с тем, что должно там находиться. И кажется, что в процессе думания мозговое вещество слабо активизировалось
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.05.2013, 12:36   #9
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А вот возьми посмотри, что в a находится и сравни с тем, что должно там находиться. И кажется, что в процессе думания мозговое вещество слабо активизировалось
я только начинаю программировать, поэтому не все знаю: я так понимаю надо нужно перевести
Код:
     procedure TMain.SpeedButton1Click(Sender: TObject);
    var a,i:integer;
begin
With Memo1 do
for i := 0 to Memo1.Lines.Count - 1 do a[i]:=StrToIntDef(Lines[i],0);
      begin
вот так да?
demon-sheff вне форума Ответить с цитированием
Старый 27.05.2013, 12:53   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Покажи, что в Memo находится. И заодно какой тип полей CAD_NUMBER
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.05.2013 в 12:56.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести данные в виде колонок ListBox PascalABC.net Konstantin1706 Помощь студентам 1 22.12.2012 20:57
Данные из ListBox на лист "Остаток" СИВ Помощь студентам 0 20.12.2012 11:43
используя процедуру keypress и фунцию listbox.при нажатии на listbox менялась ее высота Алекс38 Общие вопросы Delphi 1 19.09.2012 19:36
Как упорядочить данные (перевести данные из стольбцов в строки)? opeck Microsoft Office Excel 3 21.11.2011 01:43
как добавить в listbox файлы(пишу с помощью bassplayer)(Listbox+opendialog=play) blackstersl Общие вопросы Delphi 11 09.06.2010 13:23