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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2008, 21:54   #1
mma
Пользователь
 
Регистрация: 13.01.2008
Сообщений: 22
По умолчанию sql

Пишу в SQL :
Код:
SELECT DISTINCT Rpokaz 
FROM "rezultat.DB" Rezultat 
WHERE Rmestok in 
('ОАО PКС-котельная' , '"ЛУКОЙЛ" АЗС №1008')
создаю изменяемый SQL запрос:
Код:
procedure TForm1.Button1Click(Sender: TObject); 
var  iter,CSelect: word; 
begin 
CSelect:=DBGrid2.SelectedRows.Count; 
for iter := 0 to CSelect-1 do 
begin 
DBgrid2.DataSource.DataSet.GotoBookmark(pointer(DBGrid2.SelectedRows.items[iter])); 
query1.Close; 
Query1.SQL[3]:='( ''' + DBGrid2.DataSource.DataSet.fieldByName('pmesto').asString + ''')'; 
Query1.Open; 
    end;
Нужно, чтобы пользователь мог изменять мультиселектом последнюю строчку SQL. Этот код изменяет запрос, но только по одной выделенной записи.
Подскажите пожалуйста. Как по многим, выделенным записям изменять SQL запрос, что здесь не так?
mma вне форума Ответить с цитированием
Старый 10.04.2008, 23:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вам нужно формировать текск запроса в Query1 в цикле, причём, единственная сложность, это ставить запятые после каждого элемента, если он не последний:
вот, напишу примерно, просто чтобы донести идею... за правильность/отсутствие ошибок не ручаюсь!
Код:
var
   SSQLText : string;
...
  CSelect:=DBGrid2.SelectedRows.Count; 
  SSQLText := 'SELECT DISTINCT Rpokaz FROM "rezultat.DB" Rezultat ';
  if CSelect > 0 then 
  begin
    SSQLText := SSQLText + ' where  Rmestok in ('
    for iter := 0 to CSelect-1 do 
    begin 
      DBgrid2.DataSource.DataSet
          .GotoBookmark(pointer(DBGrid2.SelectedRows.items[iter])); 
      SSQLText := SSQLText + '''' + 
          DBGrid2.DataSource.DataSet.fieldByName('pmesto').asString + '''';
      if iter < (CSelect-1) then 
        SSQLText := SSQLText + ','
    end;
    SSQLText := SSQLText + ')'
  end;

  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Text := SSQLText;
  Query1.Open;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.04.2008, 15:06   #3
mma
Пользователь
 
Регистрация: 13.01.2008
Сообщений: 22
По умолчанию

Весь текст прошел на УРА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Уважаемый Serge_Bliznyakov, вы ГЕНИЙ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!
Спасибо вам огромнейшое, приогромнейшое!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!
mma вне форума Ответить с цитированием
Ответ


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