Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL>StringList [D7]


Layner ©   (2003-08-28 08:14:00) 

Приветствую мастера!
Подскажите, как преобразовать в StringList SQL выборку? Выбирается один столбец, записей несколько. Хотелось бы их поместить в StringList (первый вопрос), и дальше поместить в компонет ComboBox в Items (второй вопрос).
q2.SQL.Text:="SELECT edizm.name FROM edizm;";
q2.ExecSQL;

И третий вопрос, он не обязателен, на всё же, если кто поможет, буду очень благодарен, вкратце: нужен ID выбранной записи в ComboBox, т.е.
получаю я в Items несколько слов (десятков слов), показываю, пользователь выбирает запись в ComboBox, получаю, далее эту запись я могу снова сравнить по буквенно с БД, и узнать какой у неё ID, и далее уже использую в своём другом запросе, где требуется только ID, но это получится долго, и может не совсем правильно.
Может данные выборки поместить в двумерный массив, и искать ID выбранной записи уже в массиве? Или можно в ComboBox реализовать скрытое поле напротив записи (как в Перле или PHP)?
Заранее спасибо.


Reindeer Moss Eater   (2003-08-28 10:31:00) [1]

см. Reindeer Moss Eater © (28.08.03 10:00) [8]


Layner   (2003-08-28 10:29:00) [2]

stone © (28.08.03 10:18)
Это уже хорошо, спасибо, разбираюсь.
Reindeer Moss Eater © (28.08.03 10:22)
Ответы какие то интересные, не пояснишь?


Reindeer Moss Eater   (2003-08-28 10:22:00) [3]

[8]


Соловьев   (2003-08-28 10:21:00) [4]


> тут только слово, надобы ещё ID где то рядом

рядом это как? чтобы виден был?
или чего? когда ты выбираешь пункт DbLookUpComboBox, то НД автоматически перескакивает на эту запись, так что считать ID не составляет труда...
...
Id = DataSet.FieldByName("ID").AsInteger;
...


stone   (2003-08-28 10:18:00) [5]


> 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


Layner   (2003-08-28 10:12:00) [6]

ComboBox2.Items.Add(q2.Fields[0].AsString+" "+q2.Fields[1].AsString);
Значит потом парсировать значение, вот это и есть сложный вариант, тем более отображатся ID будет.. Люди говорят через DBLookupComboBox, пробую, он у меня всё время не активный..


Reindeer Moss Eater   (2003-08-28 10:09:00) [7]

а зачем?
Так ему этот ID потом в чистом виде нужен.


Соловьев   (2003-08-28 10:08:00) [8]


> Reindeer Moss Eater © (28.08.03 10:00) [8]

а зачем?
можно же указать список полей через ";" и они вывидутся.


Соловьев   (2003-08-28 10:06:00) [9]


> ComboBox2.Items.Add(q2.Fields[1].AsString);

...
ComboBox2.Items.Add(q2.Fields[0].AsString+" "+q2.Fields[1].AsString);
...


Reindeer Moss Eater   (2003-08-28 10:05:00) [10]

[8]


Layner   (2003-08-28 10:03:00) [11]

Хорошо, подскажите, плиз, как с 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:00:00) [12]

DBComboBox1.Items.AddObject(ADOQuery1.Fields[0].AsString,TObject(ADOQu ery1.Fields[0].AsInteger));


Polevi   (2003-08-28 09:57:00) [13]

>stone © (28.08.03 09:51) [6]
это не геморой а правильное решение


stone   (2003-08-28 09:51:00) [14]


> А... у меня же не одна таблица, работаю по SQL запросу,
> из нескольких таблиц. Который доступен в отображении только
> ес-но для чтения. И все изменения уйдут не понятно куда.
>


Какие изменения? Куда уйдут? Ты видимо не совсем знаком со свойствами и методам TDBLookupComboBox
Посмтотри примеры, почитай хэлп.

Если уж тебе сильно хочется гимороя, тогда:
1. Добавляешь в цикле значение полей в Комбобокс
2. При выборе итема в комбобоксе находишь по значению итема нужный ID в датасете


Layner   (2003-08-28 09:48:00) [15]

Блин, сам дурак, вот что требовалось узнать

while not ADOQuery1.eof do begin
DBComboBox1.Items.Add(ADOQuery1.Fields[0].AsString);
DBEdit1.Text:=ADOQuery1.Fields[1].AsString;
ADOQuery1.Next;


Layner   (2003-08-28 09:44:00) [16]

>Тебе нужен не комбобокс, а TDBLookupComboBox
А... у меня же не одна таблица, работаю по SQL запросу, из нескольких таблиц. Который доступен в отображении только ес-но для чтения. И все изменения уйдут не понятно куда.
Изменения делаю другими запросами, для этого надо узнать ID от Name, которыей отображается в любом визуальном компаненте, например ComboBox отображает ЕДЕНИЦЫ ИЗМЕРЕНИЯ.
КАк прокатить по запросу по записи, и считать в массив или стринглист? (Помоему это ед. прав. решение, если UpdateSQL нет в ADO)


stud   (2003-08-28 09:32:00) [17]

не execsql а open , делаеш цикл по набору данных и вносиш значение поля в items, а по поводу 3 использую dbcomdobox или lookupcombobox


stone   (2003-08-28 09:31:00) [18]

Тебе нужен не комбобокс, а TDBLookupComboBox, тогда все вышеперечисленное можно будет реализовать несколькими кликами мышки


Layner   (2003-08-28 09:24:00) [19]

Эх.. как бы разобраться...


Наверх

Титульная страница Поиск, карта сайта Написать письмо