powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамическое подключение к БД - ошибка....
12 сообщений из 12, страница 1 из 1
Динамическое подключение к БД - ошибка....
    #33802950
Bu_Ilder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для вывода содержимого таблицы "program" БД "postgres" в DBGrid использую динамическое подключение к базе в следующем коде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
TADOConnection *MyConnect=new TADOConnection(NULL);
TADOTable *MyTable=new TADOTable(NULL);
TDataSource *MyDataS=new TDataSource(NULL);

MyConnect->ConnectionString="Provider=PostgreSQL.1;Password=select;User ID=postgres;Data Source=localhost;Location=postgres";
MyConnect->Open();
MyTable->Connection=MyConnect;
MyTable->TableName="program";
MyDataS->DataSet=MyTable;
DBGrid1->DataSource=MyDataS;
MyTable->Active=true;
Компилит без ошибок.
Строка подключения рабочая.
Но при выполнении выдает ошибку (прикрепленный jpg) и все-таки выводит потом данные в ГРИДе!
Что это за ошибка?

Спасибо.
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33804325
Bu_Ilder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка вылетает при выполнении строки
Код: plaintext
MyTable->Active=true;
Скажите, как можно передать данные (например, с помощью запрса ADOQuery) из базы в DBGrid?

И второй вопрос: как определить, когда и какие параметры нужно использовать (по-моему, NULL, OWNER, THIS, APPLICATION) при создании объектов TADOConnection(), TADOTable() ?
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33804334
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bu_Ilder BI> Скажите, как можно передать данные (например, с помощью
BI> запрса ADOQuery) из базы в DBGrid?
Есть в примерах
Bu_Ilder BI> когда и какие параметры
BI> нужно использовать (по-моему, NULL, OWNER, THIS,
BI> APPLICATION) при создании объектов TADOConnection(),
BI> TADOTable() ?
Это зависит от того, кто их будет удалять. Если руками, то NULL или 0. Если
хочешь, чтобы они автоматически уничтожались при уничтожении ownera, то
указывай ownera

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33804424
Bu_Ilder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас
Bu_Ilder BI> Скажите, как можно передать данные (например, с помощью запрса ADOQuery) из базы в DBGrid?
Есть в примерах
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TADOConnection *MyConnect=new TADOConnection(NULL);
TADOTable *MyTable=new TADOTable(NULL);
TDataSource *MyDataS=new TDataSource(NULL);
TADOQuery *MyQuery=new TADOQuery(NULL);
....
MyConnect->ConnectionString="Provider=PostgreSQL.1;Password=select;User ID=postgres;Data Source=localhost;Location=postgres";
MyConnect->Open();
MyTable->Connection=MyConnect;
MyTable->TableName="program";
MyDataS->DataSet=MyTable;
DBGrid1->DataSource=MyDataS;
....
MyQuery->Connection=MyConnect;
MyQuery->SQL->Add("select * from program");
MyQuery->Open();
В справке Билдер С++ я по этому поводу ничего не нашел.
Вот я сформировал запрос - в последних трех строчках и выполнил его (ошибок небыло - радует).
Как все же посмотреть, что он там возвращает? Желательно в ДБГриде?
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33804572
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bu_IlderКак все же посмотреть, что он там возвращает? Желательно в
ДБГриде?
у дбгрида есть свойство Datasource, а у TDatasource есть свойство Dataset

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33805368
BozyaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добавь еще один DataSource и DBGrid.

XDataSource->DataSet=MyQuery;
DBGrid->DataSource=XDataSource;
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33805791
Bu_Ilder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за Ваши советы.
Сделал следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
TADOConnection *MyConnect=new TADOConnection(NULL);
TADOTable *MyTable=new TADOTable(NULL);
TDataSource *MyDataS=new TDataSource(NULL);
TDataSource *MyDataS2=new TDataSource(NULL);
TADOQuery *MyQuery=new TADOQuery(NULL);

MyConnect->ConnectionString="Provider=PostgreSQL.1;Password=select;User ID=postgres;Data Source=localhost;Location=postgres";
MyConnect->Open();
MyTable->Connection=MyConnect;
MyTable->TableName="program";
MyDataS->DataSet=MyTable;
MyDataS2->DataSet=MyQuery;
DBGrid1->DataSource=MyDataS2;

MyQuery->Close();
MyQuery->Connection=MyConnect;
MyQuery->SQL->Add("select * from program");
MyQuery->Open();

DBGrid1->Enabled=true;
Вся таблица выводится в Грид!
Другой вопрос: предыдущий код выполняестся при событии Button1Click.
Чтобы не закрывать коннект с базой и работать с ней, используя другие события (чейнжи, клики, креатеформы), по идее, нужно необходимые объекты ADO прописать глобально, т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#pragma resource "*.dfm"
TForm1 *Form1;
TADOConnection *MyConnect=new TADOConnection(NULL);
TADOTable *MyTable=new TADOTable(NULL);
TDataSource *MyDataS=new TDataSource(NULL);
TDataSource *MyDataS2=new TDataSource(NULL);
TADOQuery *MyQuery=new TADOQuery(NULL);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
.....
но тогда компиляция проходит успешно, а в самом начале выполнения исполняемого файла выскакивает ошибка "Не был произведен вызов CoInitialize". Значит что-то не нравится в таком описании объектов!?!? Как тогда "глобально" использовать коннект с БД, т.е. один раз подключился и делай с таблицами что угодно? Или при каждом событии нужно каждый раз подключаться? Что посоветуете?!
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33805843
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bu_Ilder"Не был произведен вызов CoInitialize"
а расшифровка текста ошибки не наводит на мысли ?

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33806041
Bu_Ilder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас
Bu_Ilder"Не был произведен вызов CoInitialize"
а расшифровка текста ошибки не наводит на мысли ?


Не могу представить себе, что это такое и с чем его едят!
Нашел следующий коммент.
SM> Подкажите, плиз, что я не (так) делаю.
SM> пишу строку внутри dll-ки:
SM> TXMLDocument* doc = new TXMLDocument("");
SM> Ну, типа идея вобщем понятна - надо в нужных местах написать строчки:
SM> CoInitialize(NULL);
SM> и
SM> CoUninitialize();
SM> ...а вот... где?

Точно такую же ситуацию можно получить и при использовании ADO в DLL... Для исправления ошибки, в EXE файле, сразу после входа в WinMain:

HRESULT hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED);
// или, в зависимости от задачи
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);

// тут создаются твои формы
// и т.д. и т.п.
// а перед строкой return 0;

if (hr==S_OK)
CoUninitialize();

Пробовал вставлять эту КоИнициализацию в разные места с разными параметрами - бесполезно :о(
Может глобальность по-другому можно указать или как прописать это CoInitialize()?
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33806106
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При старте приложения вызови CoInitialize(0)
При завершении - CoUninitialize

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33806330
Bu_Ilder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас
При старте приложения вызови CoInitialize(0)
При завершении - CoUninitialize
Я тут уточнил, что CoInitialize используется при создании СОМ-объектов. Вопрос, а где же я сом-объект то использую?
...
Рейтинг: 0 / 0
Динамическое подключение к БД - ошибка....
    #33806388
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bu_Ilderа где же я сом-объект то использую?ADO

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамическое подключение к БД - ошибка....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]