Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для lanu4
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2

Привязка к драйверу ODBC

05.03.2013, 05:44. Показов 1278. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Сразу скажу что в БД новичок.
Предыстория: БД mysql находится на сервере, сделал программу которая работает с ней запросы посылает. + установил драйвер MySQL ODBC все замечательно. А вот возможно ли запукстить прогу на другом компьютере не устанавливая этот драйвер? если да то как именно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2013, 05:44
Ответы с готовыми решениями:

Как подключить DLL к моему проекту и обращаться к драйверу?
Есть мой проект и есть COM-объект (драйвер контроллера) в DLL отдельно (CmdDrv.dll). Как подключить DLL к моему проекту и обращаться к...

Сбой подключения к драйверу ODBC Microsoft Access
Подскажите пожалуйста. Необходимо создать программно БД Access. Приложение на ASP.NET находится на сервере. В конфиге прописана Windows -...

Где достать расшифровку ошибок для при обращении к драйверу ODBC?
У меня сервер на платформе Windows 98. Чтобы сделать его WEB-сервером я поставил на Windows 98 Microsoft Personal WEB Server. Прописал базу...

8
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
05.03.2013, 09:28
Если ты работаешь через конкретный драйвер ODBC, то он должен быть на любом компе, на который ты захочешь установить свою программу
1
 Аватар для lanu4
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
05.03.2013, 09:35  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Если ты работаешь через конкретный драйвер ODBC, то он должен быть на любом компе, на который ты захочешь установить свою программу
да, драйвер MySQL ODBC 5.1 driver. получается на все компы где будет функционировать программа надо его устанавливать.. Ясно.
0
 Аватар для lanu4
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
11.03.2013, 07:31  [ТС]
подниму тему.
Мне говорят что можно без драйвера обойтись, и требуют этого. А я вообще не в курсе как это сделать, есть какой-то компонент или метод? Можети кто делал без драйвера, цеплялся в базе mysql?
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
11.03.2013, 19:16
lanu4, можно работать с MySQL непосредственно: mysql.h, И снова подключение mySQL к Builder
1
 Аватар для lanu4
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
12.03.2013, 05:37  [ТС]
Ок, щас гляну
0
 Аватар для lanu4
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
13.03.2013, 05:58  [ТС]
Посмотрел я пример, настроил все сделал. подцепилась к базе. Но вышла одна проблема больше одного столбца не выводит, ошибку выдает.(скрин ниже прикрепил)
Может я что то не так делаю или что?
C++
1
2
3
4
5
6
7
//подцепляется к базе все ок
        Con = mysql_init(NULL);
        Con = mysql_real_connect(Con,"IP-адрес","reader","passw","db",0,NULL,0);
        if(!Con)
                ShowMessage("Can not connect.");
        else
                ShowMessage("YES.");
потом по нажатию кнопки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
if (Con){
ListView1->Items->BeginUpdate();
ListView1->Clear();
AnsiString query="SELECT * FROM `db`.`users`;"; // 
mysql_real_query(Con,query.c_str(),query.Length()) ;
int f=mysql_errno(Con);
if(f==0){
Res=mysql_store_result(Con);
int CountOfColumns=mysql_num_fields(Res); //столбцов 12 в таблице
Fields=mysql_fetch_fields(Res);
for(int i=0;i<CountOfColumns;i++){
ListView1->Columns->Add();
ListView1->Columns->Items[i]->Caption = Fields[i].name; // ругается тут с i==2, при i=0 Fields[i].name=id i=1 Fields[i].name = NULL - почему незнаю, а должно быть fio, i=2 Fields[i].name="" - и вылетает ошибка(ниже прикреплена)
}
Row = mysql_fetch_row(Res);
while ((Row = mysql_fetch_row(Res))){
TListItem *ListItem = ListView1->Items->Add();
for(int j=0;j<CountOfColumns;j++){
if (j == 0){
ListItem->Caption = AnsiToUtf8(Row[j]);    
}
else{
ListItem->SubItems->Add(Row[j]);
}
}
}
ListView1->Items->EndUpdate();
}else{
ShowMessage("Error #: " + IntToStr(f) + char(13) + "Message: " + mysql_error(Con));
}
}
 
}
я вообще без понятия..
а если
C++
1
AnsiString query="SELECT fio FROM `db`.`users`;";
так сделать, столбец один и выводит все содержимое по столбцу fio
Миниатюры
Привязка к драйверу ODBC  
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.03.2013, 03:32
lanu4, честно говоря, не совсем понятно, почему Вы выбрали слегка такой экзотический для вывода данных компонент (TListView).

Но я тут тоже подобной ерундистики накидал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    ListView1->Clear();
 
    MYSQL_RES *result;
    MYSQL_FIELD *field;
    MYSQL_ROW row;
 
    mysql_server_init(0, NULL, NULL);
    MYSQL *db = mysql_init(NULL);
 
    if (!mysql_real_connect(db, "localhost", "root", "password", "test", 0,
        NULL, 0)) {
        ShowMessage("Ошибка соединения с сервером");
    }
    else {
        mysql_query(db, "SELECT * FROM TableOne");
        result = mysql_store_result(db);
        field = mysql_fetch_fields(result);
        for (int i = 0; i < result->field_count; i++) {
            if (!i) {
                ListView1->Columns->Add();
                ListView1->Column[i]->Caption = "Имя поля";
            }
            ListView1->AddItem(field[i].name, ListView1->Column[0]);
        }
    }
 
    while (row = mysql_fetch_row(result)) {
        ListView1->Columns->Add();
        for (int i = 0; i < ListView1->Items->Count; i++) {
            ListView1->Items->Item[i]->SubItems->Add(row[i]);
        }
    }
 
    mysql_close(db);
    mysql_server_end();
Насчет ошибки:
Цитата Сообщение от lanu4 Посмотреть сообщение
C++
1
2
ListView1->Columns->Add(); 
ListView1->Columns->Items[i]->Caption = Fields[i].name;
Вы здесь создаете очередной TListColumn, а вот само добавление TListItem'а почему-то игнорируете.

Предлагаю например вот так:
C++
1
2
3
            ListView1->Columns->Add(); 
            TListItem * ListItem = ListView1->Items->Add();
            ListItem->Caption = field[i].name;
1
 Аватар для lanu4
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
14.03.2013, 05:59  [ТС]
хм.. как то странно. Все таки косяк не в том как описывать, а в самом классе из mysql.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
typedef struct st_mysql_field {
  char *name;                 /* Name of column */
  char *org_name;             /* Original column name, if an alias */
  char *table;                /* Table of column if column was a field */
  char *org_table;            /* Org table name, if table was an alias */
  char *db;                   /* Database for table */
  char *catalog;          /* Catalog for table */
  char *def;                  /* Default value (set by mysql_list_fields) */
  unsigned long length;       /* Width of column (create length) */
  unsigned long max_length;   /* Max width for selected set */
  unsigned int name_length;
  unsigned int org_name_length;
  unsigned int table_length;
  unsigned int org_table_length;
  unsigned int db_length;
  unsigned int catalog_length;
  unsigned int def_length;
  unsigned int flags;         /* Div flags */
  unsigned int decimals;      /* Number of decimals in field */
  unsigned int charsetnr;     /* Character set */
  enum enum_field_types type; /* Type of field. See mysql_com.h for types */
} MYSQL_FIELD;
либо как то по другому. Просто заметил смещение название столбцов таблицы по переменным char в классе
в итоге получился такой лесапет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int CountOfColumns=mysql_num_fields(Res);
 
Fields = mysql_fetch_fields(Res);
for(int i=0;i<CountOfColumns;i++){
ListView1->Columns->Add();
if ( i == 0 )
        ListView1->Columns->Items[i]->Caption = Fields[i].name;
if ( i < 3 && i != 0 )
        ListView1->Columns->Items[i]->Caption = Fields[i].table;
if ( i > 3 && i < 5 )
        ListView1->Columns->Items[i]->Caption = Fields[i].org_table;
}
PS отграничение по i - мне всего лишь надо максимум 4 столбца из таблиц.
PSS может mysql.h под другую версию сервера мускула заточен, я не знаю - догадки.
The_Immortal, Ваш тоже интересный пример.Спасибо. Но я предполагаю, что ошибка именно во смещении названий столбцов таблицы по char'ам в классе.

Не по теме:

Чтож неймется заказчику.. что уж так сложно настроить драйвер чтоб непарится и облегчить жизнь себе и другим... С драйвером то на ура работает, а вот видите ли подавай без драйвера...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2013, 05:59
Помогаю со студенческими работами здесь

ODBC+mySQL, Изучаю модуль ODBC
Здравствуйте. Возник следующий вопрос. Пытаюсь выполнить простой инсерт в таблицу на mySQL сервере, однако код выдает ошибки (цикл...

Светодиоды к драйверу
Добрый день. Есть вот такой драйвер...

Подскажите по драйверу
Братцы , что за гадство ? Драйвер не могу нигде найти ? А может он не нужен ? PCI контроллер. Материнка H81M-DGS R2.0 если что. проц...

Вопрос по драйверу VNH3SP30
Вопрос по драйверу VNH3SP30 у него что минимальная частота ШИМ = максимальным оборотам движка? Собрал схему на данном драйвере VNH3SP30 ,...

Передача аргументов драйверу
Мне нужно передать драйверу один параметр типа DWORD. Как можно это сделать? Компилирую пока что с помощью WDK. Запускаю с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru