C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Direct Oracle Access
n0name
Отправлено: 12.08.2004, 16:13


Не зарегистрирован







Кто работал с DOA? помогите чайнику, где и что прописать, чтобы в ComboBox'e в раскрывающемся списке видеть записи из таблицы Oracle на сервере?
Премного благодарен тем, кто найдёт время ответить.
AVC
Отправлено: 12.08.2004, 16:54


Ветеран

Группа: Модератор
Сообщений: 1583



поторопился smile.gif

Отредактировано AVC — 12/08/2004, 16:59
AVC
Отправлено: 12.08.2004, 17:20


Ветеран

Группа: Модератор
Сообщений: 1583



Сначала создаем сессию. Для этого
1. Добавляем TOracleSession и настраиваем ее (основное)
1.1. Name = OraSes
1.2. LogonDatabase = ваш_сервер
1.3. LogonUserName = ...
1.4. LogonPassword = ....
1.5. Connected = true (Соединяемся)

2. Добавляем TOracleDataSet и настраиваем
2.1. Name = Qry
2.2. Session = OraSes
2.3. SQL->Text = Select ID, Name from owner.table Order by Name
2.4. Active = true (открываем)

3. Добавляем TComboBox
3.1. Name = CmB
3.2. Qry->Active = true;
3.2. for (Cmb->Items->Text = “”, Qry->First(); !Qry->Eof; Qry->Next())
CmB->Items->Add(Qry->FieldByName(“Name”->AsString);

Уф. Кажется все.
n0name
Отправлено: 12.08.2004, 18:20


Не зарегистрирован







Преогромное спасибо!!!
n0name
Отправлено: 12.08.2004, 18:45


Не зарегистрирован







Только, чур, не ругаться!
Строку с циклом for... прописывать в свойстве SQL моего запроса ?
И ещё, а как узнать, что выбрал пользователь (какую строку)?
AVC
Отправлено: 13.08.2004, 08:53


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

Строку с циклом for... прописывать в свойстве SQL моего запроса

Запрос возвращает просто набор строк (открытый курсор). Цикл for пишется в клиентском приложении и нужен для "перегонки" строк в ComboBox.
QUOTE

как узнать, что выбрал пользователь (какую строку)?

ComboBox->ItemIndex показывает номер выбранной строки в Items'ах. Значение можно получить так AnsiString = ComboBox->Items->Strings[ComboBox->ItemIndex];
Нужно ли поставить стиль csDropDownList — на вашей совести.
Это катит если вам нужно получать только строковые поля.
Более расространен случай когда есть пара полей типа ID, Name (справочник/дешифратор названий и т.д.). В этом случай "чистый" ComboBox плохо подходит (хотя все возможно). Подождите olegenty он вам подскажет удобные промышленные компоненты так как я издавна пользуюсь собственными.
n0name
Отправлено: 13.08.2004, 10:32


Не зарегистрирован







>случай "чистый" ComboBox плохо подходит
Если можно, в этом месте поподробнее, пожалуйста.
AVC
Отправлено: 13.08.2004, 11:08


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

>случай "чистый" ComboBox плохо подходит
Если можно, в этом месте поподробнее, пожалуйста

Так как нужно в промежуточном масиве иметь "зеркало" выборки и работать черз него. Например
TTinyPrompt *plist — динамический массив структур
Запихиваем в него результаты выборки тем самым for'ом
Настраиваем ComboBox Cmb->Items->Text = plist->NamesAsText();
Работа
CmB->ItemIndex = plist->IndexOf(default_ID);
выбранный id = plist->Items[CmB->ItemIndex]->ID

Ничего сложного, но через готовый компонент начинать будет проще.
Guest
Отправлено: 17.08.2004, 09:29


Не зарегистрирован







Если не хотите париться, то вот очень простой код :
[CODE]// Çàãðóçêà ñòðîê èç DataSet-a: [0]ïîëå-ñòðîêè; [1]ïîëå-èíäåêñ
void __fastcall LoadStrings(TOracleDataSet *DataSet, TStringList *StringList)
{
DataSet->Open();
DataSet->First();
while (!DataSet->Eof)
{
StringList->AddObject(DataSet->Fields->Fields[0]->AsString,
static_cast(DataSet->Fields->Fields[1]->AsInteger));
DataSet->Next();
}
DataSet->Close();
}
//---------------------------------------------------------------------------
// Çàãðóçêà ñòðî÷êàìè CustomComboBox-a
void __fastcall LoadCombo(TOracleDataSet *DataSet, TCustomComboBox *List)
{
TStringList *stList = new TStringList();
LoadStrings(DataSet, stList);
List->Items->Assign(stList);
delete stList;
}
//---------------------------------------------------------------------------[CODE]

Вернуться в Работа с базами данных в C++Builder