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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2009, 18:00   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию Разделитель между словами в запросе

Всем привет! . Нужна помощь в одном вопросе. Мне нужно сделать вот что. К примеру у меня есть CheckBox1 и CheckBox2, которые имеют названия "2-ек" и "3-ек" соответственно. В базе данных они имеют названия полей DVOEK и TROEK соответственно. Хочу сделать так, чтобы если я выбираю оба CheckBox-a, то у меня в Edit заносилось бы так DVOEK,TROEK. Как сделать, чтобы заносились имена я знаю. Но вот как сделать, чтобы между словами ставилась запятая ","? И как сделать, чтобы после последнего слова (если за ним ничего нет больше) запятая не ставилась. Как это сделать с запятой? Код запроса:
Код:
procedure TForm2.Button3Click(Sender: TObject);
begin
 with  Form2.Query1 do begin
  Form2.Query1.SQL.Clear;
  Form2.Query1.SQL.Add('SELECT ' + Form2.Edit8.Text); //в Edit8 должна заноситься строка с выбранными значениями
  Form2.Query1.SQL.Add('FROM rezult.db,infa.db,period.db,chetverty.db,predmety.db');
  Open;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.05.2009, 18:42   #2
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

И в чем проблема?
Код:
var
  List: TStringList;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

  List:=TStringList.Create;
  list.Delimiter:=',';
  if CheckBox1.Checked then List.Add('dvoek');
  if CheckBox2.Checked then List.Add('troek');

  Edit1.Text:=List.DelimitedText;


end;
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 19.05.2009, 19:05   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

ArtInt, спасибо). Но мне надо, чтобы значения не заменяли друг друга, а добавлялись один за другим, если выбрано несколько. А то получается, что если я выбираю первый, то значение заносится, а если еще и второй сразу выбираю, то второе значение заменяет первое, а они должны идти друг за другом через запятую.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.05.2009, 19:09   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ааа...все разобрался . Извиняюсь, все работает)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.05.2009, 19:33   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Код:
procedure TForm1.Add;
begin


  if CheckBox1.Checked then List.Add('dvoek');
  if CheckBox2.Checked then List.Add('troek');

  Edit1.Text:=List.DelimitedText;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   List:=TStringList.Create;
  list.Delimiter:=',';
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 Add;
   List.Clear;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
 Add;
   List.Clear;
end;
Да, там просто процедуру можно сделать, главное объект List потом уничтожать не забывай.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 19.05.2009, 19:56   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А зачем этот код?
Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
   List:=TStringList.Create;
  list.Delimiter:=',';
end;
И для чего мы делаем это?
Код:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 Add;
   List.Clear;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
 Add;
   List.Clear;
end;
Поясни? . Чтобы знать.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.05.2009, 20:38   #7
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Код этот к посту #3 . Там говорилось, что значения заменяли друг друга и так далее. Вот и решил выложить свое решение, что первое пришло в голову.
Смысл такой, сначала делается специальная процедура Add, в которой мы производим проверку на галочку, добавляем в список и потом в Edit.
Для того чтобы значения списка каждый раз были новыми мы делаем List.Clear, то есть формируется новый список, когда кликаем на чекбокс.
А список создается и разделитель один раз при активации формы, потом при уничтожении формы кстати или выходе из программы освобождаем List.Free;
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 20.05.2009, 15:48   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А вот вопрос: можно ли в качестве разделителя между словами использовать AND? Пробовал делать так:
Код:
procedure TForm2.Button3Click(Sender: TObject);
var
 List_Query: TStringList;
begin
 with  Form2.Query1 do
 begin
  List_Query:=TStringList.Create;
  List_Query.Delimiter:='AND';

  Form2.Query1.SQL.Clear;
  Form2.Query1.SQL.Add('SELECT ' +  Form2.Edit8.Text);
  Form2.Query1.SQL.Add('FROM rezult.db,infa.db,period.db,chetverty.db,predmety.db');
  Form2.Query1.SQL.Add('WHERE ' + Form2.Edit10.Text);

  if CheckBox15.Checked = True then
    begin
     List_Query.Add('Chetvert = ' + QuotedStr(Form2.DBLookupComboBox3.Text) + '');
    end;

  if CheckBox14.Checked = True then
    begin
    List_Query.Add('Predmet = ' + QuotedStr(Form2.DBLookupComboBox2.Text) + '');
    end;

  if Form2.Edit5.Text <> '' then
    begin
     List_Query.Add('LAST_NAME = ' + Form2.Edit5.Text +'');
    end;

  if Form2.Edit6.Text <> '' then
    begin
     List_Query.Add('FIRST_NAME = ' + Form2.Edit6.Text +'');
    end;

  if Form2.Edit7.Text <> '' then
    begin
     List_Query.Add('OTCHESTVO = ' + Form2.Edit7.Text +'');
    end;

  if CheckBox16.Checked = True then
    begin
     List_Query.Add('GOD = ' + Form2.Edit9.Text +'');
    end;

  Form2.Edit10.Text:=List_Query.DelimitedText;
  Open;
 end;
end;
Но выдается ошибка: [Error] Unit2.pas(839): Incompatible types: 'Char' and 'String'.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.05.2009, 16:46   #9
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Во-первых тип Char поддерживает только один символ.
Во-вторых, а если бы даже был бы String, то тогда возникает проблема, если будет встречаться and в добавляемых items. А чем запятая не нравится или другой символ редко встречающийся в словах?
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 20.05.2009, 17:06   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от ArtInt
А чем запятая не нравится или другой символ редко встречающийся в словах?
Не, с запятой это другой случай. Там все нормально работает. Это уже другое. Мне надо, чтобы условия в WHERE разделялись AND-ом.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа: число словами Artur09 Помощь студентам 3 10.03.2019 07:29
Номер телефона словами alexBlack Софт 0 23.05.2008 09:19
задача со словами,оканчивающимися на -онок,-енок Милено4ка Помощь студентам 5 15.05.2008 19:22
Именовать элементы массива не цифрами, а словами. Air Общие вопросы Delphi 15 07.03.2008 18:49
десятичный разделитель zetrix Microsoft Office Excel 0 30.10.2006 19:32