SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.02.2010 01:44:36

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Помогите пожалуйста сформировать запрос из программы на msvc++ 6.0 к БД MySQL студентов по ID студента. Имеется таблица в БД: user Студенты, в ней есть ключевое поле [student_id] ID, нужно сделать так чтобы по ID студента (ID студента записано в переменную), формировался запрос к БД, который будет искать такой же ID студента, и соответственно выводить информацию о студенте на экран.
Пример: имеется ID студ: 02 75 09 01 01 08 72 - записан в переменную,например. И запрос по этому ID ищет такой же ID в БД и выводит инфу о студенте на экран.
Подскажите, как сделать таким образом запрос???


Прикрепленные файлы:
Attachment Icon DB.png, Размер: 585,533 байт, Скачано: 498

Неактивен

 

#2 14.02.2010 22:44:00

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Ну, сделайте через подготовленные выражения — это самый простой
и безопасный способ.

Неактивен

 

#3 16.02.2010 23:33:55

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Если честно только начинаю с MySQL разбираться, поэтому подготовленные выражения, для меня пока никакого смысла не несут...Можно у вас проконсультироваться по шагам, что за чем следует...
Для начала я подключил библиотеки необходимые в частности libmysql.lib + необходимые заголовочные файлы mysql.h.
Затем попробовал функцией mysql_real_connect соединиться со своей БД получилось, компильнулось без ошибок...Хотелось бы дальше поподробней узнать, что делать, чтобы решить поставленную выше задачу, какие для этого необходимо использовать функции из АПИ. Помогите, пожалуйста, разобраться, почему, зачем и как?) Буду очень признателен.

Да и ещё можете пожалуйста с кодировками помочь разобраться, прилагаю 2 файлика.
Бинарный файлик test.sql был импортирован в HeidiSQL, когда просматриваешь таблицы, то кириллицу не выводит, пробовал ставить сp1251, utf8 и koi8r без результатно( Менял кодировки через names, через непосредственно переменные character_set_* и через настройки самого сервера, результат один и тот же никакой...Когда смотришь переменную variables, то переменные character_set_* соответственно меняются на нужную кодировку, но в таблицах по прежнему остаются кракозябрики. Помогите, чем сможите. Очень нужно, решить этот вопрос. Заранее спасибо!

Отредактированно Purgen (17.02.2010 04:01:17)


Прикрепленные файлы:
Attachment Icon charset.JPG, Размер: 22,444 байт, Скачано: 535

Неактивен

 

#4 17.02.2010 12:27:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

1. Для начала разберитесь, на каком языке собираетесь писать. Для С надо
использовать С API, для С++ — C++ API smile

2. Изучите соответствующий язык.

3. Напишите на нем программу, используя соответствующий API и документацию
на официальном сайте.

--

Вопрос с кодировками никак не связан с API, почитайте FAQ #3, #8.

Неактивен

 

#5 17.02.2010 12:31:05

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

paulus написал:

1. Для начала разберитесь, на каком языке собираетесь писать. Для С надо
использовать С API, для С++ — C++ API smile

Не обязательно так строго. C API можно комфортно использовать в C++, так как оно есть везде и не требует дополнительного коннектора.

Неактивен

 

#6 17.02.2010 12:55:13

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

А как же философия С++? smile

Использовать можно, конечно, но это чрезвычайно неудобно. Ну и нет никакого
бонуса от того, что используешь С++, т.к. реально получается программа на С.
Ну или получается в 2 раза больше кода из-за явного приведения к void* и обратно.

Неактивен

 

#7 17.02.2010 13:07:48

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Философию C++ большинство никогда не дочитывает (включая разработчиков компиляторов). На мой взгляд чуть более, чем половина идей ООП утопичны. Если говорить про unix-way программирование, то вообще объекты мало причем (в традиционном иерархическом понимании).

paulus, ты говоришь так, потому, что давно не писал на C. Там надо переменные в начале функции объявлять и нельзя в структуру добавить функцию. Ради подобных маленьких удобств люди и пишут на C++.

Неактивен

 

#8 26.02.2010 00:11:37

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Написал прогу на С используя среду MS Visual C++ 6.0, использовал С API MySQL, только пришлось вместо функции mysql_connect использовать mysql_real_connect. Возникла проблема с русским языком, когда вывожу содержимое таблицы в консоли на экран, то вместо русских букв, вижу кракозябрики. Вот кусок кода отвечающий за вывод таблицы на экран.

while((row = mysql_fetch_row (res)))
    {
    for (k=0 ; k < mysql_num_fields (res); k++)
    printf("%s\t",row[k]);
    fprintf(file,"%s\t",row[k]);
    printf("\n");
           }

в итоге получаю см.скрин

Отредактированно Purgen (26.02.2010 00:12:29)


Прикрепленные файлы:
Attachment Icon бд.bmp, Размер: 678,758 байт, Скачано: 1,023

Неактивен

 

#9 26.02.2010 00:35:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Какая красота! smile
Вас спасет FAQ #8 и #3. В виндовой консоли надо сделать chcp 1251.

И ставьте фигурные скобочки или отступы красиво, тогда станет понятно, что
у Вас написано

for ()
    printf()
fprintf(); /* <-- не в цикле! */

Неактивен

 

#10 26.02.2010 01:37:07

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

как в консоли сделать chcp 1251???
и почему fprintf не в цикле, када не в цикле ошибку выдаёт

Неактивен

 

#11 26.02.2010 02:08:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Угу, у Вас в коде — не в цикле smile
Сделайте путем вбивания команды...

Неактивен

 

#12 26.02.2010 03:13:19

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

можно как-нить поподробней, что написать-то конкретно надобно?

Неактивен

 

#13 26.02.2010 12:36:25

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

chcp 1251 smile

Этот опыт основывается на общении с пользователями Windows на этом
форуме. К сожалению, у меня нету доступа к консоли Windows, чтобы
проверить это, но я верю в то, что меня не обманули smile

Если не работает — виндовая консоль живет в cp866 по умолчанию.

Неактивен

 

#14 26.02.2010 15:42:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

> можно как-нить поподробней, что написать-то конкретно надобно?
Проще всего создать бат-файл, в котором будет две инструкции:

chcp 1251
YourProgram.exe

Это если на консоль выводить надо.

Можно еще использовать (в коде программы) функции CharToOem (или CharToOemA, в зависимости от того, используется ли юникод), они конвертируют строки из cp1251 в cp866, полученный результат можно выводить в консоль. Я бы делал скорее так :-).

Для того, чтобы выводить в файл это не требуется вовсе (только вот set names cp1251 после установления соединения все равно надо установить, разве что эта кодировка по умолчанию в mysql-сервере установлена).

> К сожалению, у меня нету доступа к консоли Windows, чтобы проверить это, но я верю в то, что меня не обманули smile

Не обманули :-).


Касательно C vs C++ :-) : стандарт c99 позволяет переменные не в начале блока ставить, в том же gcc если собирать с опцией -std=c99, правда преимущества c++ этим далеко не ограничиваются, конечно же :-D.

Касательно API - Paulus, откройте профессиональную тайну, какое api для mysql вы используете, если пишете на c++ (не на c)? И насколько вы довольны этим API?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#15 26.02.2010 16:08:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Я не программист, поэтому программы большие длинные и полезные не пишу sad

На плюсах мне лично очень нравится libmysql++, она написана именно для плюсов,
а не в режиме совместимости с jdbc. Собственно, она же теперь рекомендуется как
плюсатая библиотека для 5.1 и MySQL AB smile

Неактивен

 

#16 26.02.2010 16:19:35

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Понятно, слышал про нее. А Кем рекомендуется? Cамими Mysql AB?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#17 26.02.2010 17:22:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Неактивен

 

#18 27.02.2010 03:00:19

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Написал таки страшного зверя, спешу порекламировать smile
http://sqlinfo.ru/articles/info/13.html

Отличие С от С++ (и от нескольких других языков).

Неактивен

 

#19 03.03.2010 00:39:09

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

как сишными средствами сделать конверт из utf-8 в cp1251, например, или в другую какую-нибудь. Напишите пожалуйста.

Спасибо!

Неактивен

 

#20 03.03.2010 01:14:13

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Обычно для этого используют всё-таки библиотеки. Для чистого С, наверное,
iconv подойдет. В случае с MySQL можно сразу просить данные в нужной ко-
дировке — SET NAMES cp1251 wink

Неактивен

 

#21 04.03.2010 23:56:22

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

проблему с кодировками роде как разрулил,  в консоли кириллица норм выводится, тока в файле надо шрифт на Terminal поменять, чтоб по-русски прочитать.
Теперь возникла очередная поблема при приведении типов...
имеется массив типа unsigned char data[50]
также есть строка типа char query[]
когда делаю функцию strncat(query,&data[40],6), то мне компилятор ругается, что дескать 'strncat' : cannot convert parameter 2 from 'unsigned char *' to 'const char *'. Как можно преобразовать из 'unsigned char *' to 'const char *'. Если можно, то желательно на примере показать.

Спасибо.

Неактивен

 

#22 05.03.2010 13:28:15

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

У меня есть ощущение, что Вы пытаетесь компилировать сишную программу
компилятором С++ wink

(char*) data + 40

Неактивен

 

#23 11.03.2010 22:01:48

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Да по видимому так и есть, пишу на С, а среду разработки использую Visual C++, соответственно и компилятор си++.
Всё прогу написал, выборку производит из БД как надо...) конечно, с преобразованиями пришлось поковыряться, но в целом не плохо получилось)))) спасибо за поддержку.

Теперь вопрос следующего характера, как форму в среде MSVC++ 6.0 сделать? Теперь мне надо чтобы данные по результатам выборки из БД в красивой форме выводились. Содержание формы: Фото, ФИО, Курс, Факультет, дата рождения.
Затем, внизу в той же форме 6 кнопок на сером фоне, и в самом внизу табличка с тремя колонками и скроллингом и всё это в одной форме. Не подскажите каким это образом делается? Или может какие-нибудь форумы программистов посоветуете где такие вопросы обсуждаются?

Спасибо.

Неактивен

 

#24 11.03.2010 22:25:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

Если Вы это собираетесь делать на чистом С, я Вам очень сочувствую smile
Обкладывайтесь книжками по WinAPI и смотрите примеры по созданию
диалогов. Теоретически, может хватить знаний и в С++ для того, чтобы
использовать MFC, это может *немножко* упростить жизнь.

http://www.google.ru/search?q=simple+di … nt=firefox — вот тут первая
ссылка, вроде, адекватная, но без картинок sad

Неактивен

 

#25 11.03.2010 22:55:13

Purgen
Участник
Откуда: Петрозаводск
Зарегистрирован: 12.02.2010
Сообщений: 20

Re: Запрос из прогрммы на MSVC++ 6.0 к БД MySQL

ну наверно всё-таки на С, так как С++ не знаю(((( там же вроде в этой среде разработки есть при создании нового проекта Win32 Application или это не то?

Отредактированно Purgen (12.03.2010 01:00:01)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson