Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Builder+ODBC+MySQL!

15K
16 октября 2006 года
Monika
26 / / 14.10.2006
Здравствуйте!
Подскажите, пожалуйста, как сделать это соединение и вообще работать с базой данных через ОДБЦ. Нашла много всякой информации, но все разрозненные сведения, так что общей картины, алгоритма, не представляю :( по возможности, поподробнее... Заранее спасибо!
21K
16 октября 2006 года
Gleb2017
8 / / 05.10.2006
The setup32 binary distribution may be obtained from the file myodbc-xxx.zip
at http://www.mysql.com/
My e-mail: [email]lindows_ua2@mail.ru[/email], [email]lindows_ua2@bigmir.net[/email]
Write to me, and I send to You sources - How to work with ODBC.
Best regars Gleb.
21K
16 октября 2006 года
Gleb2017
8 / / 05.10.2006
Steps:
==========================================
1. Пуск - Настройка - Панель управления
2. Перейти в папку - Мой компьютер
3. Перейти в папку - Панель управления
4. Перейти в папку - Администрирование
5. Запустить - Источники данных (ODBC)
6. Нажать на кнопку - Добавить
7. Выбрать драйвер
8. Написать имя источника (Имя для соединения - например MyBase1)
9. Выбрать базу данных


10. Run C++ Builder
11. Goto Tab - ADO
12. Drag to form ADOConnection
13. Click to ConnectionString
14. Select Use Connection String
15. Click button Build
16. Select provider
17. Подключение - источник данных MyBase1
18. Click button Ok
19. Click button Ok

20. Set field ADOConnection1->Connected to - true
21. Drag ADOTable to form
22. Set Connection to ADOConnection1
23. Set TableName - MYTABLE(for sample)
24. Set Activate to true

25. Switch to DataAcess
26. Drag DataSource1 to form
27. Set DataSet to ADOTable1

27. Switch to DataControls
28. Drag DBGrid to form
29. Set DataSource to DataSource1

Enjoy!
332
16 октября 2006 года
Valiant
416 / / 27.09.2004
вот сообщение из форума ветку потерял
у меня оно скопировано с Мускулем работать на мой взгляд лучше без всяких ОДБЦ
Покопавшись на программерских форумах и форуме MySQL мне удалось таки собрать достаточно информации, чтобы наконец подключиться к MySQL серверу без всяких ADO, ODBC. Ни для кого не секрет, что для того, чтобы ваша программа заработала на другой машине - нужно настраивать DSN в ODBC, а для MySQL сервера на эту машину еще нужно поставить специальный компонент. Можно конечно включить инструкцию для пользователя как настраивать DSN, а также включить тот самый MySQL ODBC драйвер и наверно это будет неплохо в случае, если вы решили заработать денег на тех.поддержке. Далее идет инструкция "Step By Step", все манипуляции проделывались на BCB6.0. Для начала нужно скачать сам MySQL. Мой архив назывался так: mysql-noinstall-6.1.7-beta-win32 (у вас наверно будет поновее). Убедитесь, что вы запустили и настроили MySQL сервер, а также имеете права администратора на нем
Начнем.

1. Копируем файл из папки lib\opt:
libmysql.dll
в отдельную папку - for_bcb\lib
2. Запускаем командную строку (cmd), переходим в папку где лежит implib:
c:\>n:
n:\>cd N:\Program Files\Borland\CBuilder6\Bin
n:\Program Files\Borland\CBuilder6\Bin>implib -c I:\for_bcb\lib\opt\libmysql.lib I:\for_bcb\lib\opt\libmysql.dll

3. Копируем папку include в папку for_bcb, находим строку:
#define my_socket SOCKET
и меняем ее на:
#define my_socket UINT_PTR
4. Создаем новый проект.
5. Кидаем на форму Button1 и ListView1.
6. Ставим свойство ListView1
ViewStyle = vsReport.
7. Жмем Shift+F11 (Project->Add To Project).
Выбираем Files of Type->lib, переходим в директорию for_bcb\lib
и выбираем файл libmysql.lib.
8. Жмем Ctrl+Shift+F11 (Project->Options). Выбираем вкладку "Directories/Conditional".
Жмем на кнопки с тремя точками в Include Path и Library Path.
В Include Path выбираем директорию for_bcb\include. В Library Path for_bcb\lib.
9. Сохраняем проект.
10. Добавляем две строчки в исходнике (F12):

Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#define __LCC__ // эту и
#include <mysql.h> // эту
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Копируем for_bcb\lib\libmysql.dll в папку куда будет сохраняться скомпилированный
exe файл (обычно в той же директории что и файлы проекта, если речь не о BDS2006)

11. Пример приложения. Не забудьте изменить в коде логин и пароль на свои данные (администраторские). Возможно потребуется также поменять адрес сервера localhost на ваш IP. Программа выполняется SQL запрос к базе данных MySQL и выводит все данные из таблицы `db`

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MySQLpmain.h"
#define __LCC__
#include <mysql.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
MYSQL *Con;
MYSQL_RES *Res;
MYSQL_ROW Row;
MYSQL_FIELD *Fields;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Con=mysql_init(Con);
Con=mysql_real_connect(Con,"localhost","root","123456","mysql",0,NULL,0);
if(!Con) ShowMessage("Can not connect.");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Con){
ListView1->Items->BeginUpdate();
ListView1->Clear();
AnsiString query="SELECT * FROM `mysql`.`db`;"; // magic string ;)
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);
Fields=mysql_fetch_fields(Res);
for(int i=0;i<CountOfColumns;i++){
ListView1->Columns->Add();
ListView1->Columns->Items->Caption = Fields.name;
}
while ((Row = mysql_fetch_row(Res))){
TListItem *ListItem = ListView1->Items->Add();
for(int j=0;j<CountOfColumns;j++){
if (j == 0){
ListItem->Caption = Row[j];
}else{
ListItem->SubItems->Add(Row[j]);
}
}
}
ListView1->Items->EndUpdate();
}else{
ShowMessage("Error #: " + IntToStr(f) + char(13) + "Message: " + mysql_error(Con));
}
}
}
//---------------------------------------------------------------------------
15K
17 октября 2006 года
Monika
26 / / 14.10.2006
Доброго времени суток!
Спасибо большое за помощь, соединение с базой данных выполнено, но возникла проблема с кириллицей, текстовые данные выводятся абракадаброй... В Mysqlе кодировка cp1251.
21K
19 октября 2006 года
Gleb2017
8 / / 05.10.2006
Look:
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

In MySQL type:

mysql>set CHARACTER SET cp1251_koi8;
mysql>use имя твоей базы данных;
mysql>insert into member values('Киев',044);
mysql>select * from member;


ENJOY!
My site: http://oxygen2017.narod.ru
15K
19 октября 2006 года
Monika
26 / / 14.10.2006
В MySQL кодировка стоит ср1251, и проблем нет. В Buildere, когда вывожу свою таблицу, вместо русских символов иероглифы!.. А в самой базе все нормально выводится... Вот в чем проблема...
21K
23 октября 2006 года
Qwerty77
7 / / 17.10.2006
Всем доброго дня! Помогите разобраться пожалуйста.
Структура БД:

ТОВАР (Id, название, цена) Id первичный ключ
КЛИЕНТ (Id, ФИО) Id первичный ключ
ПРОДАЖА (Id-товара, Id-клиента, дата, количество) Id-товара, Id-клиента –первичные ключи.

Пишу приложение на Билдере.
Вопрос: как сделать так, чтобы при внесении данных в столбец Id-товара таблицы ПРОДАЖА появлялся список товаров из таблицы ТОВАР, чтобы товар можно было выбрать,а не набирать вручную?
Читал про cbsAUTO и PickList, но там этот список (чтобы он потом появлялся) надо предварительно набить вручную,а не брать данные из таблиы...
Кто работал с Билдером, подскажите, как это сделать?
21K
24 октября 2006 года
Qwerty77
7 / / 17.10.2006
Народ!! Неужели никто не создавал приложений для БД на Билдере? Отзовитесь, пожалуйста!!
92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
я что-то слабо понял про Id товара и его название....
всмысле ты уже забил данные и тогда появилось название товара, или когда ты фокус на поле с id товара переводишь тогда появляется список....

поясни plz.
92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
[QUOTE=Monika]В MySQL кодировка стоит ср1251, и проблем нет. В Buildere, когда вывожу свою таблицу, вместо русских символов иероглифы!.. А в самой базе все нормально выводится... Вот в чем проблема...[/QUOTE]

попробуй серверу MySQL (из своей программы) после соединения сразу же послать комманду:
SET CHARACTER SET cp1251 (ну или как-то так... не вспомню точно, но вроде бы должно проканать)

:)
21K
24 октября 2006 года
Qwerty77
7 / / 17.10.2006
В общем, мне что нужно: чтобы при заполнении таблицы ПРОДАЖА, а именно поля "ID товара" мне выдавался список (когда фокус на поле с id товара перевожу тогда появляется список..) Id товара из таблицы ТОВАР.
Если кто работал с Access, там для полей таблицы есть опция "подстановка", с помощью которой можно в поле одной таблицы (обычно дочерней) помещать данные другой (родительской таблицы). Т.о., при заполнении таблицы ПРОДАЖА значения полей "Id-товара" и "Id-клиента" мы выбираем из соответствующих списков а не набиваем вручную.
Не могу никак найти, как это реализовать на Билдере..
92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
хм... ну например создай простой ListBox и туда загружай названия всех товаров (если ты все действия, при добавлении, совершаешь не в Grid'е каком-нибудь)

и при выборе из него подставляй ID товара в нужное тебе поле (сильно ногами не пинать если опять не понял тебя ;) )

PS: я сегодня что-то сплю... :(
21K
24 октября 2006 года
Qwerty77
7 / / 17.10.2006
Пинать ногами?.. Да ты что! Спасибо тебе,что ты хоть ответил!!
Но наверно мы опять друг друга не поняли...:)
Ладно, попозже попробую объяснить еще подробнее :)
92
24 октября 2006 года
Тень Пса
2.2K / / 19.10.2006
если тебе нужно что-то наподобии всплывающих подсказок (aka завершения кода в билдере, ну всмысле выпадашка со списком функций, ну а в твоём случае со списком имен товаров)... тогда я тебя понял, и покопаюсь дома, т.к. на работе времени что-то немного на сторонние задачи )))))))

а если нет, то можешь написать на мыльник [email]this_hell@ngs.ru[/email] там почитаю получше и отвечу )))))
15K
29 октября 2006 года
Monika
26 / / 14.10.2006
Один компонент ADOQuery может выполнить только один запрос?? или я что-то неправильно поняла... Если нет, то как с помощью ADOQuery выполнить несколько запросов?
309
30 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Одновременно не может. Но можно сделать следующее.
1. Записать в SQL текст первого запроса.
2. Запустить/открыть первый запрос
3. Считать результат во временную переменную
4. Закрыть запрос.
5. Записать в SQL текст второго запроса.
6. Указать значение параметра
7. Запустить/открыть второй запрос

А лучше всего, использовать два объекта AdoQuery. Создать AdoConnection, настроить в нём подключение, и использовать его другими компонентами AdoDB
15K
30 октября 2006 года
Monika
26 / / 14.10.2006
да уж... а если нужно написать 20 запросов к базе, значит, должно быть 20 компонентов ADOQuery??!! каждый из которых к базе надо подключить!
309
30 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Нет, просто если активно используется одновременное обращение к нескольким запросам, то лучше использовать два и более компонентов доступа - всё определяется исходя из конкретной ситуации.
Если есть несколько компонентов, то нет нужды настраивать каждый. Создаётся объект AdoConnection, в который пишется ConnectionString. А потом его адрес присваисвается свойству Connection остальных компонентов.
23K
04 декабря 2006 года
meskallito
4 / / 04.12.2006
Monika, напиши пожайлуста как ты решила проблему с абракадаброй в билдере. запарился прям
15K
04 декабря 2006 года
Monika
26 / / 14.10.2006
в общем, я в билдере переименовала все записи на русский язык и записала изменения в базу. Итого: теперь у меня в базе абракадабра (хотя стоит ср1251), а в билдере все ок! :) и при выполнении запросов тоже все ок, данные из базы в приложение возвращаются в нормальном виде.
А сделать чтоб и в базе хорошо и в билдере не получилось...
А вообще у меня в группе один парень тоже мутил приложение в билдере, а база мускл, так он уверял,что такой проблемы у него не было! что везде все по-русски. НО! пришел показывать преподу на преподском компе, запустил и у него в билдере абракадабра!! а сервер мускл тот же! он сам устанавливал!
23K
05 декабря 2006 года
meskallito
4 / / 04.12.2006
Спасибо за ответ
Посмотрю что получится
23K
07 декабря 2006 года
meskallito
4 / / 04.12.2006
Monika
Не знаю или тебя это еще интересует. Решение этой проблемы такое: надо сразу после подключения к мускулу послать команду
SET NAMES 'cp1251'
(Тень Пса советовал в этой теме, только ошибся в формулировке)
она определяет кодировку подключения. все начинает работать нормально. если этого не сделать то потом могут возникнуть проблемы с командами типа ORDER.
15K
09 декабря 2006 года
Monika
26 / / 14.10.2006
Надо попробовать, спасибо. Хотя странно, ведь я в файле конфигурации установила везде
default-character-set=cp1251
Но самое интересное, что запросы с ORDER BY работают!! сортирует как надо! :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог