Форум Программирование Проблемы с MySQL |
Страницы: «1» «2» | |||||||
|
Привет всем. Пишу курсовую в которой используется MySQL. Работаю с помощью компонента TMySQL (http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1318). Проблема в следующем: подключение проходин нормально, БД и таблицы создаются, но: при выполнение следующего кода: Lessons:=MySQL.Query('SHOW TABLES'); while Lessons.FetchRow do ListBox1.Items.Add(Lessons.Values[Lessons.RecNo]); // возможны опечатки, так как писал "от руки", не копируя из делфи добавляется название только одной (первой) таблицы, а все остальные - пустые строки (т.е если таблицы 3, то вернется название первой, и две пустые строки, в лист боксе будет 3 элемента). При этом данные из таблиц читаются нормально, в архиве есть пример с исходником, делал на подобии. Может быть, кто-то сталкивался с подобным? Подскажите, в чем тут дело? | ||||||
|
Из Delphi с MySQL не работал, но попробуем разобраться. А при выполнении этого запроса, скажем, через phpMyAdmin весь список передаётся нормально? Да, и ещё: уверены, что данные нужно забирать именно как Lessons.Values[Lessons.RecNo] ? | ||||||
|
phpMyAdmin у меня не установлен, но через MySQLQueryBrowser этот запрос возвращает все таблице в БД (как и должно быть). Насчет данных - в компоненте есть два варианта, один по имени (но я не знаю по какому имени их считывать, поэтому остановился на втором) - в исходниках сказано, что и тот и тот метод рабочие - RecNo - номер извлекаемой записи, увеличивается автоматически. По-идее, он проходит цикл столько раз, сколько таблиц в базе, но вот после первой возвращает пустые строки =\ Может, компонент багнутый? хотя, из таблиц этим-же способом данные нормально читаются | ||||||
|
Lessons.RecNo - номер записи, т.е. 0, 1, 2... Но вот Lessons.Values[Lessons.RecNo] - не очень похоже на правду. А если несколько полей в выборке, то как к ним обратиться? По логике в Values указывается номер поля, а текущая запись меняется автоматически через FetchRow. В общем я предлагаю заменить на Lessons.Values[0] - может так будет работать? | ||||||
|
интересная мысль, как попробую отпишусь | ||||||
|
в примере есть такой код: //запросим все строки из таблицы "groups" query_result := MySQL.Query('SELECT * FROM `groups`'); if query_result = nil then //если nil значит произошла ошибка в запросе begin //причинами могут быть отсутствие таблицы или некорректный запрос или... ShowMySQLError; //посмотрим ошибку Exit; end; //выполнили запрос к "groups", получили набор данных (query_result <> nil), //FetchRow извлекает первую и последующие строки из результирующего набора данных //работать с этой строкой можно до тех пор пока не извлекли следующую //если FetchRow вернула False, значит или строк нет или они кончились while query_result.FetchRow do //пробежимся по записям begin //и заполним lvGroups ListItem := lvGroups.Items.Add; ListItem.Caption := query_result.ValueByName['name']; New(Data); Data.id := query_result.ValueByName['id']; ListItem.Data := Data; //query_result.RecNo информирует какую строку мы извлекли (порядковый номер. отсчёт от 0) end; //query_result.FetchRow(5) если надо извлечь, например, пятую строку судя по нему, получить название нужно с помощью query_result.ValueByName['---'], в таком случае, какое имя имеет столбец с названиями таблиц после запроса SHOW TABLES; поглядел синтаксис, в выпадающем окошке (Code Helper кажется), конструкция Lessons.Values[]: string; заменил код на такой: Lessons := MySQL.Query('SHOW TABLES'); i:=0; while Lessons.FetchRow do begin ComboBox1.Items.Add(Lessons.Values[i]); inc(i); end;результат, к сожалению, такой же таблиц в БД - 2, в комбобоксе - две записи, первая - название первой таблицы, а вторая пустая. Что еще может быть? | ||||||
|
Так вы же сами сделали то же самое. Для Values указывается номер поля, а не номер записи - записи двигаются сами. Что будет, если там вписать Values[0]? Цитата (IlluminatI): в таком случае, какое имя имеет столбец с названиями таблиц после запроса SHOW TABLES; Обычно он имеет имя "Tables_in_ИМЯ-БАЗЫ-ДАННЫХ", но может и отличаться. | ||||||
|
т.е, как я понимаю, получать данные через ValueByName['Tables_in_ИМЯ-БАЗЫ-ДАННЫХ'] не очень корректно? Хотя код вида ComboBox1.Items.Add(Lessons.ValueByName['Tables_in_mysql']) работает Насчет Values[0] я что-то не очень вас понял :-[ вы имели ввиду такое: Lessons.Values[0]? если да, то она возвращает после запроса пустую строку. | ||||||
|
Цитата (IlluminatI): т.е, как я понимаю, получать данные через ValueByName['Tables_in_ИМЯ-БАЗЫ-ДАННЫХ'] не очень корректно? Если быть уверенным, что используемый движок выдаёт именно с таким названием поля - корректно. Ну и при условии, что движок фиксированный, т.е. работа с одной и той же СУБД. Цитата (IlluminatI): Хотя код вида ComboBox1.Items.Add(Lessons.ValueByName['Tables_in_mysql']) работает Ну наконец-то Цитата (IlluminatI): вы имели ввиду такое: Lessons.Values[0]? если да, то она возвращает после запроса пустую строку. Да, такое. А Values[1] тоже не работает? Если нет, значит у них там что-то иначе сделано. | ||||||
|
точно также возвращает пустую строку. Насчет движка и СУБД я уверен, так что буду использовать так Спасибо за помощь! Если что, буду писать | ||||||
Перейти в раздел:
© 2004 - 2025, Delphi.int.ru |
Версия форума: 1.10 (19.01.2010) |
Выполнено за 0.02 сек. |