Текущий архив: 2003.09.18;
Скачать: CL | DM;
ВнизSQL>StringList Найти похожие ветки
← →
Layner (2003-08-28 08:14) [0]Приветствую мастера!
Подскажите, как преобразовать в StringList SQL выборку? Выбирается один столбец, записей несколько. Хотелось бы их поместить в StringList (первый вопрос), и дальше поместить в компонет ComboBox в Items (второй вопрос).
q2.SQL.Text:="SELECT edizm.name FROM edizm;";
q2.ExecSQL;
И третий вопрос, он не обязателен, на всё же, если кто поможет, буду очень благодарен, вкратце: нужен ID выбранной записи в ComboBox, т.е.
получаю я в Items несколько слов (десятков слов), показываю, пользователь выбирает запись в ComboBox, получаю, далее эту запись я могу снова сравнить по буквенно с БД, и узнать какой у неё ID, и далее уже использую в своём другом запросе, где требуется только ID, но это получится долго, и может не совсем правильно.
Может данные выборки поместить в двумерный массив, и искать ID выбранной записи уже в массиве? Или можно в ComboBox реализовать скрытое поле напротив записи (как в Перле или PHP)?
Заранее спасибо.
← →
Layner (2003-08-28 09:24) [1]Эх.. как бы разобраться...
← →
stone (2003-08-28 09:31) [2]Тебе нужен не комбобокс, а TDBLookupComboBox, тогда все вышеперечисленное можно будет реализовать несколькими кликами мышки
← →
stud (2003-08-28 09:32) [3]не execsql а open , делаеш цикл по набору данных и вносиш значение поля в items, а по поводу 3 использую dbcomdobox или lookupcombobox
← →
Layner (2003-08-28 09:44) [4]>Тебе нужен не комбобокс, а TDBLookupComboBox
А... у меня же не одна таблица, работаю по SQL запросу, из нескольких таблиц. Который доступен в отображении только ес-но для чтения. И все изменения уйдут не понятно куда.
Изменения делаю другими запросами, для этого надо узнать ID от Name, которыей отображается в любом визуальном компаненте, например ComboBox отображает ЕДЕНИЦЫ ИЗМЕРЕНИЯ.
КАк прокатить по запросу по записи, и считать в массив или стринглист? (Помоему это ед. прав. решение, если UpdateSQL нет в ADO)
← →
Layner (2003-08-28 09:48) [5]Блин, сам дурак, вот что требовалось узнать
while not ADOQuery1.eof do begin
DBComboBox1.Items.Add(ADOQuery1.Fields[0].AsString);
DBEdit1.Text:=ADOQuery1.Fields[1].AsString;
ADOQuery1.Next;
← →
stone (2003-08-28 09:51) [6]
> А... у меня же не одна таблица, работаю по SQL запросу,
> из нескольких таблиц. Который доступен в отображении только
> ес-но для чтения. И все изменения уйдут не понятно куда.
>
Какие изменения? Куда уйдут? Ты видимо не совсем знаком со свойствами и методам TDBLookupComboBox
Посмтотри примеры, почитай хэлп.
Если уж тебе сильно хочется гимороя, тогда:
1. Добавляешь в цикле значение полей в Комбобокс
2. При выборе итема в комбобоксе находишь по значению итема нужный ID в датасете
← →
Polevi (2003-08-28 09:57) [7]>stone © (28.08.03 09:51) [6]
это не геморой а правильное решение
← →
Reindeer Moss Eater (2003-08-28 10:00) [8]DBComboBox1.Items.AddObject(ADOQuery1.Fields[0].AsString,TObject(ADOQu ery1.Fields[0].AsInteger));
← →
Layner (2003-08-28 10:03) [9]Хорошо, подскажите, плиз, как с DBLookupComboBox1, я реализую так
procedure Tf.Button1Click(Sender: TObject);
begin
q2.Close;
q2.SQL.Text:="SELECT edizm.rowid, edizm.name FROM edizm ORDER BY edizm.name;";
q2.Open;
while not q2.eof do begin
ComboBox2.Items.Add(q2.Fields[1].AsString); //тут только слово, надобы ещё ID где то рядом...
q2.Next;
end;
end;
← →
Reindeer Moss Eater (2003-08-28 10:05) [10][8]
← →
Соловьев (2003-08-28 10:06) [11]
> ComboBox2.Items.Add(q2.Fields[1].AsString);
...
ComboBox2.Items.Add(q2.Fields[0].AsString+" "+q2.Fields[1].AsString);
...
← →
Соловьев (2003-08-28 10:08) [12]
> Reindeer Moss Eater © (28.08.03 10:00) [8]
а зачем?
можно же указать список полей через ";" и они вывидутся.
← →
Reindeer Moss Eater (2003-08-28 10:09) [13]а зачем?
Так ему этот ID потом в чистом виде нужен.
← →
Layner (2003-08-28 10:12) [14]ComboBox2.Items.Add(q2.Fields[0].AsString+" "+q2.Fields[1].AsString);
Значит потом парсировать значение, вот это и есть сложный вариант, тем более отображатся ID будет.. Люди говорят через DBLookupComboBox, пробую, он у меня всё время не активный..
← →
stone (2003-08-28 10:18) [15]
> Layner (28.08.03 10:03) [9]
> Хорошо, подскажите, плиз, как с DBLookupComboBox1, я реализую
> так
> procedure Tf.Button1Click(Sender: TObject);
> begin
> q2.Close;
> q2.SQL.Text:="SELECT edizm.rowid, edizm.name FROM edizm
> ORDER BY edizm.name;";
> q2.Open;
> while not q2.eof do begin
> ComboBox2.Items.Add(q2.Fields[1].AsString); //тут только
> слово, надобы ещё ID где то рядом...
> q2.Next;
> end;
> end;
Вот это тогда уже не надо
> while not q2.eof do begin
> ComboBox2.Items.Add(q2.Fields[1].AsString); //тут только
> слово, надобы ещё ID где то рядом...
> q2.Next;
> end;
У DBLookupComboBox1 свойства DataSource и DataField оставляешь пустыми (это важно). В ListSource указываешь DataSource ссылающийся на q2. B ListField - поле, что должно отображаться. В KeyField - поле, что содержит нужный ID.
Значение ID выбранного пункта всегда можно получить через
DBLookupComboBox1.KeyValue
← →
Соловьев (2003-08-28 10:21) [16]
> тут только слово, надобы ещё ID где то рядом
рядом это как? чтобы виден был?
или чего? когда ты выбираешь пункт DbLookUpComboBox, то НД автоматически перескакивает на эту запись, так что считать ID не составляет труда...
...
Id = DataSet.FieldByName("ID").AsInteger;
...
← →
Reindeer Moss Eater (2003-08-28 10:22) [17][8]
← →
Layner (2003-08-28 10:29) [18]stone © (28.08.03 10:18)
Это уже хорошо, спасибо, разбираюсь.
Reindeer Moss Eater © (28.08.03 10:22)
Ответы какие то интересные, не пояснишь?
← →
Reindeer Moss Eater (2003-08-28 10:31) [19]см. Reindeer Moss Eater © (28.08.03 10:00) [8]
Страницы: 1 вся ветка
Текущий архив: 2003.09.18;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.009 c