Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамическое подключение к БД - ошибка.... / 12 сообщений из 12, страница 1 из 1
20.06.2006, 15:19
    #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
21.06.2006, 09:09
    #33804325
Bu_Ilder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое подключение к БД - ошибка....
Ошибка вылетает при выполнении строки
Код: plaintext
MyTable->Active=true;
Скажите, как можно передать данные (например, с помощью запрса ADOQuery) из базы в DBGrid?

И второй вопрос: как определить, когда и какие параметры нужно использовать (по-моему, NULL, OWNER, THIS, APPLICATION) при создании объектов TADOConnection(), TADOTable() ?
...
Рейтинг: 0 / 0
21.06.2006, 09:12
    #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
21.06.2006, 09:52
    #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
21.06.2006, 10:37
    #33804572
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое подключение к БД - ошибка....
Bu_IlderКак все же посмотреть, что он там возвращает? Желательно в
ДБГриде?
у дбгрида есть свойство Datasource, а у TDatasource есть свойство Dataset

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

XDataSource->DataSet=MyQuery;
DBGrid->DataSource=XDataSource;
...
Рейтинг: 0 / 0
21.06.2006, 14:48
    #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
21.06.2006, 14:56
    #33805843
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое подключение к БД - ошибка....
Bu_Ilder"Не был произведен вызов CoInitialize"
а расшифровка текста ошибки не наводит на мысли ?

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.06.2006, 15:36
    #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
21.06.2006, 15:47
    #33806106
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое подключение к БД - ошибка....
При старте приложения вызови CoInitialize(0)
При завершении - CoUninitialize

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

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


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