Вопрос № 85372: Здравствуйте!
1. Нужно ли для каждого DataSet добавлять новый Transact в IBX компонентах? Или достаточно одного, а при формировании запросов отключать/включать DataSet и всё?
2. Имеем следующее:
DataSet: selectSQL='select UID, NAME from A...Вопрос № 85432: У меня такой вопрос: Написанапрограмма на Delphi 7, работающая с базой данных Interbase . Все работает нормально под Win XP, но когда приложение запускается под Win 2000, все работает кроме процедуры поиска в базе данных, конструкция поиска указана н...
Вопрос №
85.372
Здравствуйте!
1. Нужно ли для каждого DataSet добавлять новый Transact в IBX компонентах? Или достаточно одного, а при формировании запросов отключать/включать DataSet и всё?
2. Имеем следующее:
DataSet: selectSQL='select UID, NAME from ACCOUNTS';
Мне нужно IBComboBox или IBLookupComboBox заполнить полученным значением. Не получилось. То есть, нужно вывести список по NAME, а при выборе пункта мне был доступен UID выбранного элемента. Приведите, пожалуйста, пример.
3. По поводу предыдущего пункта. Сделал обычный ComboBox и ещё один невидимый. Первый заполнил данными из NAME, второй из UID. Получилось что индексы у них совпадают. Но это изврат и пожирает память. Как сделать проще? Как вообще в обычный ComboBox добавлять строку текста и какое-то присвоенное ему значение? Не ItemIndex.
Отправлен: 04.05.2007, 08:12
Вопрос задал: Yadovit (статус: 5-ый класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, Yadovit!
1. Это зависит от поставленой задачи. :)
В общем случае можно обойтись одним компонентом TIBTransaction. Если подходить с теоретической стороны вопроса, то на каждый компонент TIBQuery (или TIBDataSet) нужно иметь по одному компоненту TIBTransaction, что, согласитесь, выглядит разумно. :)
2. Вы, наверное, имели в виду DBComboBox и DBLookupComboBox. :)
Чтобы (например в DBComboBox) выводить данные из запроса нужно свойству DataSource присвоить правильный компонент TDataSource, который связан с Вашим запросом. И если Вы не использовали Fields Editor запроса, то в выпадающем списке DataField должны присутствовать все поля, которые выдает Ваш запрос. Это проверено.
3. Можно, но тоже будет изврат. :)
У метода ComboBox.AddItem() вторым параметром идет объект типа TObject. Перед вызовом метода, создаете новый объект, у которого есть в наличие только одно поле типа Integer (или какой там тип имеет Ваше поле UID), присваивать этому полю значение UID и добавлять объект в Items:
Type
Thi-hi = class(TObject)
public
uid: integer;
End;
Var
hi-hi: THi-hi
i: integer;
Begin
IBQuery.First;
For i:=0 To IBQuery.Count-1 do
Begin
hi-hi:=Thi-hi.Create;
hi-hi.uid:=IBQuery.FieldByName('uid').AsInteger;
ComboBox.AddItem(IBQuery.FieldByName('name').AsString, hi-hi);
IBQuery.Next;
End;
End;
Теперь, чтобы получить значение из какого-нибудь итема нужно выбрать
ComboBox.Items.Objects[Индекс].uid
А строку текста:
ComboBox.Items.Strings[Индекс]
:)
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 04.05.2007, 09:21 Оценка за ответ: 5
Отвечает: Химяк Виктор Васильевич
Здравствуйте, Yadovit!
1. Я создаю две транзакции: одна для читающих запросов, вторую для пишущих. Желательно создвать третью для отчетов - у каждой транзакции свой набор параметров.
2. Если вы используете DBLookComboBox, тогда віставите свойства ListSource, ListField, KeyField. Не зпалняйте свойствo DataSet.
3. Пример использования ComboBox:
пишем процедуру:
procedure Setcmbx(CMBX:TComboBox;DS:TIBTable//или другой источник данных);
begin
if DS.Active then DS.Close;
DS.Open;
CMBX.Items.Clear;
DS.First;
while not DS.Eof do
begin
CMBX.Items.AddObject(DS.Fields[1].Value,TObject(DS.Fields[0].asinteger));
DS.Next;
end;
end;
Заносим данные:
Setcmbx(ComboBox1,IBTable1//или другой источник данных);
Извлечь значение Object можно так:
i:=integer(ComboBox.Items.Objects[ComboBox.ItemIndex]));
А так получить конкретную строку:
ComboBox.ItemIndex:=ComboBox.Items.IndexOfObject(TObject('UID'));
Ответ отправил: Химяк Виктор Васильевич (статус: 5-ый класс)
Ответ отправлен: 04.05.2007, 10:01
Вопрос № 85.432
У меня такой вопрос: Написанапрограмма на Delphi 7, работающая с базой данных Interbase . Все работает нормально под Win XP, но когда приложение запускается под Win 2000, все работает кроме процедуры поиска в базе данных, конструкция поиска указана ниже. В чем может быть проблема? Причем иногда на Win2000, при запуске программы требуется файл qtintf70.dll в С:winntsystem32
Приложение:
Отправлен: 04.05.2007, 14:10
Вопрос задал: Bvg82 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: LEXASOFT
Здравствуйте, Bvg82!
Вы наверное используете компонент со вкладки QReport. Просто скопируйте этот файл в папку с вашей программой или в С:winntsystem32
Ответ отправил: LEXASOFT (статус: 4-ый класс)
Ответ отправлен: 06.05.2007, 00:37 Оценка за ответ: 3 Комментарий оценки: Файл я копировал, все верно, программа запускается, но поиск все равно не работает.. А как могут влиять компоненты со вкладки Qreport на выбранную операционную систему?