Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 321
от 10.05.2007, 02:05

Администратор:Gh0stik
В рассылке:Подписчиков: 325, Экспертов: 42
В номере:Вопросов: 2, Ответов: 3


Вопрос № 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 на выбранную операционную систему?


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 (beta) от 02.05.2007
Яндекс Rambler's Top100

В избранное