Задавайте вопросы, мы ответим
Вы не зашли.
Помогите пожалуйста сформировать запрос из программы на msvc++ 6.0 к БД MySQL студентов по ID студента. Имеется таблица в БД: user Студенты, в ней есть ключевое поле [student_id] ID, нужно сделать так чтобы по ID студента (ID студента записано в переменную), формировался запрос к БД, который будет искать такой же ID студента, и соответственно выводить информацию о студенте на экран.
Пример: имеется ID студ: 02 75 09 01 01 08 72 - записан в переменную,например. И запрос по этому ID ищет такой же ID в БД и выводит инфу о студенте на экран.
Подскажите, как сделать таким образом запрос???
Неактивен
Ну, сделайте через подготовленные выражения — это самый простой
и безопасный способ.
Неактивен
Если честно только начинаю с 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)
Неактивен
1. Для начала разберитесь, на каком языке собираетесь писать. Для С надо
использовать С API, для С++ — C++ API
2. Изучите соответствующий язык.
3. Напишите на нем программу, используя соответствующий API и документацию
на официальном сайте.
--
Вопрос с кодировками никак не связан с API, почитайте FAQ #3, #8.
Неактивен
paulus написал:
1. Для начала разберитесь, на каком языке собираетесь писать. Для С надо
использовать С API, для С++ — C++ API
Не обязательно так строго. C API можно комфортно использовать в C++, так как оно есть везде и не требует дополнительного коннектора.
Неактивен
А как же философия С++?
Использовать можно, конечно, но это чрезвычайно неудобно. Ну и нет никакого
бонуса от того, что используешь С++, т.к. реально получается программа на С.
Ну или получается в 2 раза больше кода из-за явного приведения к void* и обратно.
Неактивен
Философию C++ большинство никогда не дочитывает (включая разработчиков компиляторов). На мой взгляд чуть более, чем половина идей ООП утопичны. Если говорить про unix-way программирование, то вообще объекты мало причем (в традиционном иерархическом понимании).
paulus, ты говоришь так, потому, что давно не писал на C. Там надо переменные в начале функции объявлять и нельзя в структуру добавить функцию. Ради подобных маленьких удобств люди и пишут на C++.
Неактивен
Написал прогу на С используя среду 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)
Неактивен
Какая красота!
Вас спасет FAQ #8 и #3. В виндовой консоли надо сделать chcp 1251.
И ставьте фигурные скобочки или отступы красиво, тогда станет понятно, что
у Вас написано
Неактивен
как в консоли сделать chcp 1251???
и почему fprintf не в цикле, када не в цикле ошибку выдаёт
Неактивен
Угу, у Вас в коде — не в цикле
Сделайте путем вбивания команды...
Неактивен
можно как-нить поподробней, что написать-то конкретно надобно?
Неактивен
chcp 1251
Этот опыт основывается на общении с пользователями Windows на этом
форуме. К сожалению, у меня нету доступа к консоли Windows, чтобы
проверить это, но я верю в то, что меня не обманули
Если не работает — виндовая консоль живет в cp866 по умолчанию.
Неактивен
> можно как-нить поподробней, что написать-то конкретно надобно?
Проще всего создать бат-файл, в котором будет две инструкции:
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?
Неактивен
Я не программист, поэтому программы большие длинные и полезные не пишу
На плюсах мне лично очень нравится libmysql++, она написана именно для плюсов,
а не в режиме совместимости с jdbc. Собственно, она же теперь рекомендуется как
плюсатая библиотека для 5.1 и MySQL AB
Неактивен
Понятно, слышал про нее. А Кем рекомендуется? Cамими Mysql AB?
Неактивен
Неактивен
Написал таки страшного зверя, спешу порекламировать
http://sqlinfo.ru/articles/info/13.html
Отличие С от С++ (и от нескольких других языков).
Неактивен
как сишными средствами сделать конверт из utf-8 в cp1251, например, или в другую какую-нибудь. Напишите пожалуйста.
Спасибо!
Неактивен
Обычно для этого используют всё-таки библиотеки. Для чистого С, наверное,
iconv подойдет. В случае с MySQL можно сразу просить данные в нужной ко-
дировке — SET NAMES cp1251
Неактивен
проблему с кодировками роде как разрулил, в консоли кириллица норм выводится, тока в файле надо шрифт на 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 *'. Если можно, то желательно на примере показать.
Спасибо.
Неактивен
У меня есть ощущение, что Вы пытаетесь компилировать сишную программу
компилятором С++
(char*) data + 40
Неактивен
Да по видимому так и есть, пишу на С, а среду разработки использую Visual C++, соответственно и компилятор си++.
Всё прогу написал, выборку производит из БД как надо...) конечно, с преобразованиями пришлось поковыряться, но в целом не плохо получилось)))) спасибо за поддержку.
Теперь вопрос следующего характера, как форму в среде MSVC++ 6.0 сделать? Теперь мне надо чтобы данные по результатам выборки из БД в красивой форме выводились. Содержание формы: Фото, ФИО, Курс, Факультет, дата рождения.
Затем, внизу в той же форме 6 кнопок на сером фоне, и в самом внизу табличка с тремя колонками и скроллингом и всё это в одной форме. Не подскажите каким это образом делается? Или может какие-нибудь форумы программистов посоветуете где такие вопросы обсуждаются?
Спасибо.
Неактивен
Если Вы это собираетесь делать на чистом С, я Вам очень сочувствую
Обкладывайтесь книжками по WinAPI и смотрите примеры по созданию
диалогов. Теоретически, может хватить знаний и в С++ для того, чтобы
использовать MFC, это может *немножко* упростить жизнь.
http://www.google.ru/search?q=simple+di … nt=firefox — вот тут первая
ссылка, вроде, адекватная, но без картинок
Неактивен
ну наверно всё-таки на С, так как С++ не знаю(((( там же вроде в этой среде разработки есть при создании нового проекта Win32 Application или это не то?
Отредактированно Purgen (12.03.2010 01:00:01)
Неактивен