Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > MySQL + CBuilder


Автор: DissDoc 12.3.2007, 15:41
Вообщем поставил MySQL  и CBuilder. Что нужно подключить и что перекомпилить, чтобы работало? Если можно - прямую ссылку на мануал? Я просто все перерыл, никак найти не могу что нужно сделать ( smile 

Автор: DissDoc 12.3.2007, 16:27
Нацеплял всего 
SQLConnection1
SQLClientDataSet1
DataSource1

Как теперь создать запрос?  smile 

Автор: SABROG 12.3.2007, 20:53
http://forum.codenet.ru/showthread.php?t=29026

Автор: Rodman 13.3.2007, 10:31
SABROG, че там все наворочено...


DissDoc, кинь libmySQL.dll в %CBuilder%\Bin\ и настраивай SQLConnection1

а потом SQLQuery юзай...

Автор: SABROG 13.3.2007, 12:38
Битый архив...

Век живи, век учись. Оказывается можно в SQLConnection выбрать DriverName = MySQL. :P

В общем dbExpress еще с собой тянуть придется...

Автор: Rodman 13.3.2007, 12:40
Цитата(SABROG @  13.3.2007,  11:38 Найти цитируемый пост)
Это не через ODBC разве пойдет ? 

кто то сказал что нельзя так?!

Автор: SABROG 13.3.2007, 13:13
А как это к DBGRIDу прикрутить, чета не выходит :P ?

На форме SQLConnection, SQLQuery, DataSource, DBGrid;

SQLConnection в true
SQLQuery в true
к DataSource подтянут SQLQuery

в DBGrid пытаюсь подтянуть DataSource и получаю:

"Operation not allowed on a unidirectional dataset."

Я немного английский знаю. Грубо говоря он мне пишет, что операция не поддерживает
двунаправленный источник данных. Как сделать его хотябы однонаправленным для селекта,
я пока не понял...

Автор: criz 20.2.2008, 19:24
Цитата(SABROG @ 12.3.2007,  20:53)
http://forum.codenet.ru/showthread.php?t=29026

Сенкс за линку =)
У меня такой вопрос:
Код

   AnsiString query="SELECT * FROM `mysql`.`db`;";

Я заменил эту строчку. Запрос вводится в Edit1.
Если вводить запросы, например, SELECT/SHOW, т.е. запросы, которые что-либо возвращают, то все гут.
Но вот если вводить запросы: USE, CREATE, DROP, etc, то вылетает "Exception Notification" =( Но запрос при этом выполняется удачно.
Как быть в этом случае?

Автор: criz 25.2.2008, 01:00
Товарисчи, поможите smile Никак не могу найти решение :(
Вот код:
Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        if(Con)
        {
                ListView1->Items->BeginUpdate();
                ListView1->Clear();
        query = Edit3->Text;
        mysql_real_query(Con, query.c_str(), strlen(query.c_str())); 

        err = mysql_errno(Con);        
        if(err == 0)                        // 
        {
                Res = mysql_store_result(Con);
                col_count = mysql_num_fields(Res);     
                Fields = mysql_fetch_field(Res);
                for(i=0; i<col_count; i++)
                {
                        ListView1->Columns->Add();
                        ListView1->Columns->Items[i]->Caption = Fields[i].name;
                }
                while((Row = mysql_fetch_row(Res)))
                {
                        TListItem *ListItem = ListView1->Items->Add();
                        for(j=0; j<col_count; j++)
                        {
                                if(j == 0)
                                        ListItem->Caption = Row[j];
                                else
                                        ListItem->SubItems->Add(Row[j]);
                        }
                }
                ListView1->Items->EndUpdate();
        }
        else
                ERR_MSG;
        }

}


Автор: rsjabber 30.11.2008, 16:09
Цитата(criz @ 25.2.2008,  01:00)
Товарисчи, поможите smile Никак не могу найти решение :(
Вот код:
Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        if(Con)
        {
                ListView1->Items->BeginUpdate();
                ListView1->Clear();
        query = Edit3->Text;
        mysql_real_query(Con, query.c_str(), strlen(query.c_str())); 

        err = mysql_errno(Con);        
        if(err == 0)                        // 
        {
                Res = mysql_store_result(Con);
                col_count = mysql_num_fields(Res);     
                Fields = mysql_fetch_field(Res);
                for(i=0; i<col_count; i++)
                {
                        ListView1->Columns->Add();
                        ListView1->Columns->Items[i]->Caption = Fields[i].name;
                }
                while((Row = mysql_fetch_row(Res)))
                {
                        TListItem *ListItem = ListView1->Items->Add();
                        for(j=0; j<col_count; j++)
                        {
                                if(j == 0)
                                        ListItem->Caption = Row[j];
                                else
                                        ListItem->SubItems->Add(Row[j]);
                        }
                }
                ListView1->Items->EndUpdate();
        }
        else
                ERR_MSG;
        }

}


код непонятный, хоть бы комментарии поставил...
Переменная Con это что? даже не объявлена...

Автор: mrbrooks 30.11.2008, 18:51
rsjabber, есть мнение что за девять месяцев решение уже нашли

Автор: Marduk 7.11.2010, 22:14
Гриды не умеют работать с uniDirectional датасетами, чтобы его использовать нужно использовать сразу ClientDataset, DataSetProvider и DataSource вместе.
Оригинальный текст с embarcadero: 
"Operation not allowed on unidirectional dataset"

A unidirectional dataset can only move through records in one direction, not back and forward.  A grid can move in both directions and so can't be connected to a unidirectional dataset.

You realy need to read the "Developers Guide", part II, 'Developing Database Applications', page 14-6.

To use a grid you need these components ...
SQLQuery
DataSetProvider
ClientDataSet
DataSource 
DBGrid

This can also be achieved by using the TSQLClientDatSet which murges the first 3 components in the above list into 1.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)