Название: Ms Sql Server 2000 + Qt + Odbc Отправлено: strength2008 от Апрель 23, 2011, 08:30 Ответа в предыдущей теме, видимо, не будет. Возможно, надо сформулриовать по-другому вопрос.
Итак, в связке Ms Sql Server 2000 + Qt + Odbc у меня есть форма редактирования данных БД, в которой поля редактирования Edit -ы и 1 ComboBox связаны QWidgetMapper -ом с соответствующими полями БД. Код банален, но на всякий случай приведу и его. Таблица, с которой я работаю в форме, создавалась в SQL Servere вручную, но описать ее можно следующим скриптом: Код: query.exec("CREATE TABLE employee (" Т.е. таблица с внешним ключом. Поэтоиу использовалась далее QSqlRelationalTableModel: Код: tableModel = new QSqlRelationalTableModel(this); далее идет привязка через Mapper: Код: mapper = new QDataWidgetMapper(this); Когда у меня готовые записи внесены в БД ручками, то маппер работает вполне сносно - редактирование готовых записей и навигация по ним нормально проходит. Но вот когда начинает выполняться слот формы по добавлению новой записи в таблицу Код: void EmployeeForm::addEmployee() mapper всегда возвращает false, и соответственно в MessageBox выводится следующая ошибка: QODBCResult::exec: unable to bind variable: "[Microsoft][ODBC SQL Server Driver]Дополнительная возможность не реализована" В общем, я перечитал весь этот форум, посвященный БД+Qt, и ответа на этот вопрос не нашел. Уже третий день этот вопрос висит. Помогите люди добрые и знающие, пожалуйста. Название: Re: Ms Sql Server 2000 + Qt + Odbc Отправлено: Странник от Апрель 23, 2011, 08:39 дело в том, что драйвер ODBC не реализует возможность bind'а переменных типа дата-время. когда редактирование работало, ты, видимо, не изменял это поле. корректная работа возможна с датой в строковом формате ISO: date.toString(Qt::ISODate).
Название: Re: Ms Sql Server 2000 + Qt + Odbc Отправлено: strength2008 от Апрель 23, 2011, 11:29 Большое спасибо за ответ.
Во-первых, что самое странное, когда готовые записи редактируешь в форме, то и дату вполне спокойно поменять можно. Трабла возникает только тогда, когда приходится новую запись добавлять, т.е. вызывать mapper->submit(). Ну да ладно, действительно, снес с формы Edit, который работал с датой и связывание маппера с полем БД типа "дата" удалил, и теперь данные более-менее нормально вносятся в БД. 1)Тоесть как я понял, когда драйвер ODBC, связать DataEdit с маппером не выйдет. Поправьте меня, если выход все же какой-то есть. Ведь явное преобразование к типу строка в поле DateEdit не сделаешь! 2)Но решив одну проблему, натолкнулся на другую. Данные теперь хоть и добавляются, но как-то интересно - новые внесенные записи иногда дублируют существующие записи в БД. Т.е. к примеру была у меня 1 одна запись- 3 Иванов 17 2323 ivanov@mail.ru Потом я добавил вторую - 4 Петров 12 2666 petrov@yandex.ru Закончил я редактирование второй записи, решил перейти на первую, а потом снова вернулся на вторую. И вторая запись представляет собой копию первой, т.е. 3 Иванов 17 2323 ivanov@mail.ru Такое происходит не каждый раз, но часто. Что это может быть? |