Найдено 5 результатов
- Чт 21 дек 2017 22:44
- Форум: Universal Data Access Components
- Тема: LastInsertId возвращает 0
- Ответы: 3
- Просмотры: 6655
Re: LastInsertId возвращает 0
Спасибо за помощь !
- Чт 21 дек 2017 18:15
- Форум: Universal Data Access Components
- Тема: Пароль Access
- Ответы: 1
- Просмотры: 5819
Пароль Access
Здравствуйте.
Можно ли Как-то программно определить, установлен ли пароль на файл базы данных Access?
Пробовал обрабатывать события onError у uniconnectio, Но там получается сложное взаимодействие между функциями. Хотелось бы попроще.
Ещё пробовал метод Connect() Выполнять в обработке исключения. Но исключение не срабатывает.
Есть какой-нибудь способ до вызова метода соединения узнать установлен ли пароль на файл базы данных?
Спасибо .
Можно ли Как-то программно определить, установлен ли пароль на файл базы данных Access?
Пробовал обрабатывать события onError у uniconnectio, Но там получается сложное взаимодействие между функциями. Хотелось бы попроще.
Ещё пробовал метод Connect() Выполнять в обработке исключения. Но исключение не срабатывает.
Есть какой-нибудь способ до вызова метода соединения узнать установлен ли пароль на файл базы данных?
Спасибо .
- Пт 15 дек 2017 15:38
- Форум: Universal Data Access Components
- Тема: LastInsertId возвращает 0
- Ответы: 3
- Просмотры: 6655
LastInsertId возвращает 0
Здравствуйте!
Пишу на C++ Builder xe
База данных MySQL
В БД есть таблицы связанные многие-ко-многим.
Например Преподаватели и Ученики. Каждый препод может обучать нескольких учеников, так же, как и все ученики могут обучаться разных преподов.
Задача состоит в том, чтобы из пользовательского интерфейса пользователь смог ввести данные преподавателя и прикрепить к этому преподавателю несколько учеников.
Проблема в том, что мне нужно знать id нового преподавателя, но запись ещё не сохранена, а выполнен только insert().
Пробую uniquery->LastInsertId: возвращает 0.
Пробовал ставить defaultvalues=true-не помогло .
Почему возвращается 0 и что можно сделать? Необходимо зарезервировать id. Что можно ещё попробовать ?
Пишу на C++ Builder xe
База данных MySQL
В БД есть таблицы связанные многие-ко-многим.
Например Преподаватели и Ученики. Каждый препод может обучать нескольких учеников, так же, как и все ученики могут обучаться разных преподов.
Задача состоит в том, чтобы из пользовательского интерфейса пользователь смог ввести данные преподавателя и прикрепить к этому преподавателю несколько учеников.
Проблема в том, что мне нужно знать id нового преподавателя, но запись ещё не сохранена, а выполнен только insert().
Пробую uniquery->LastInsertId: возвращает 0.
Пробовал ставить defaultvalues=true-не помогло .
Почему возвращается 0 и что можно сделать? Необходимо зарезервировать id. Что можно ещё попробовать ?
- Пн 04 дек 2017 01:34
- Форум: Universal Data Access Components
- Тема: Проверка введенных данных в БД при транзакции
- Ответы: 3
- Просмотры: 6698
Re: Проверка введенных данных в БД при транзакции
Благодарю за быстрый ответ!
Вариант с CachedUpdates очень помог.
Спасибо!
Вариант с CachedUpdates очень помог.
Спасибо!
- Ср 29 ноя 2017 19:21
- Форум: Universal Data Access Components
- Тема: Проверка введенных данных в БД при транзакции
- Ответы: 3
- Просмотры: 6698
Проверка введенных данных в БД при транзакции
Здравствуйте!
Пишу на C++ Builder Embarcadero XE
Доступ к БД: UniDAC
БД: MySQL
Таблицы: InnoDB (поддерживает транзакции)
Задача: проверить введенные пользователем данные с формы. Проверить нужно на то заполнены ли обязательные поля или нет. Форм, таблиц, текстовых полей и т. д. очень много, поэтому думаю об универсальном решении.
Вот, что придумал: смотрю в Information_Schema (Columns) по именам полей их свойство IS_NULLABLE, затем смотрю введенное значение пользователем в это поле и смотрю, может ли оно быть Null или не может. Составляю список всех пустых обязательных полей и вывожу их пользователю в виде сообщения, чтоб именно их заполнил.
! На пользовательской форме используются компоненты ввода DB (DBEdit, DBComboBox и т.д.), которые подключены к нужным DataSource. Пользователь вводит данные, нажимает "Сохранить", срабатывает метод Post();
! Необходимо использовать транзакции при сохранении.
Пробовал таблицы MyISAM (не поддерживают транзакции)
Вот в, чем затык:
1. Непонятно, где хранятся данные кроме компонентов до метода Post();
Пробовал смотреть значения полей, пока открыт Insert(), но еще не сработал Post() - везде NULL, т.е. данных пока еще нет в DataSet.
2. Непонятно, какой запрос отправляется в БД (и отправляется ли вообще), если пользователь с формы вводит данные, а потом срабатывает Post()
3. Нашел предложение отключить RequiredFields у TUniQuery, отправить Post(), и посмотреть, что отправилось, но в этом случае не срабатывает RollBack() (т.к. MyISAM не поддерживает транзакции).
Вот пример:
4. Когда я переключился на InnoDB, то я тупо не могу выполнить Post(); пока транзакция активна.
вот что написано в у вас в документах:
То есть в транзакции выполняются 2 запроса и потом Commit().
Вот мой код сохранения:
Тут я ни Post() ни Execute() выполнить не могу, ругается на активную транзакцию, не понимаю, как это выполняется в примере у разработчика.
Вопросы:
1. Где хранятся данные введенные в компоненты, подключенные к БД до выполнения запроса?
2. Какой запрос отправляет TUniQuery к БД при методе Post() и отправляет ли вообще?
3. Как организовать транзакцию в моем случае, когда нет явного запроса, а данные введены в форму?
4. Какие есть еще идеи по моей задаче?
Заранее спасибо!
Пишу на C++ Builder Embarcadero XE
Доступ к БД: UniDAC
БД: MySQL
Таблицы: InnoDB (поддерживает транзакции)
Задача: проверить введенные пользователем данные с формы. Проверить нужно на то заполнены ли обязательные поля или нет. Форм, таблиц, текстовых полей и т. д. очень много, поэтому думаю об универсальном решении.
Вот, что придумал: смотрю в Information_Schema (Columns) по именам полей их свойство IS_NULLABLE, затем смотрю введенное значение пользователем в это поле и смотрю, может ли оно быть Null или не может. Составляю список всех пустых обязательных полей и вывожу их пользователю в виде сообщения, чтоб именно их заполнил.
! На пользовательской форме используются компоненты ввода DB (DBEdit, DBComboBox и т.д.), которые подключены к нужным DataSource. Пользователь вводит данные, нажимает "Сохранить", срабатывает метод Post();
! Необходимо использовать транзакции при сохранении.
Пробовал таблицы MyISAM (не поддерживают транзакции)
Вот в, чем затык:
1. Непонятно, где хранятся данные кроме компонентов до метода Post();
Пробовал смотреть значения полей, пока открыт Insert(), но еще не сработал Post() - везде NULL, т.е. данных пока еще нет в DataSet.
2. Непонятно, какой запрос отправляется в БД (и отправляется ли вообще), если пользователь с формы вводит данные, а потом срабатывает Post()
3. Нашел предложение отключить RequiredFields у TUniQuery, отправить Post(), и посмотреть, что отправилось, но в этом случае не срабатывает RollBack() (т.к. MyISAM не поддерживает транзакции).
Вот пример:
Код: Выделить всё
procedure TForm1.UniQuery_personsBeforePost(DataSet: TDataSet);
begin
If UniQuery_persons.FieldByName('family').IsNull Then begin
ShowMessage('Заполните поле "Фамилия"');
abort;
end;
end;
вот что написано в у вас в документах:
Код: Выделить всё
if not UniConnection.InTransaction then
UniConnection.StartTransaction;
try
// Do some actions with database. For example:
UniSQL1.Execute;
UniSQL2.Execute;
// Commit the current transaction to reflect changes in database if no errors were raised
UniConnection.Commit;
except
// Rollback all changes in database made after StartTransaction if an error was raised
UniConnection.Rollback;
end;
Вот мой код сохранения:
Код: Выделить всё
if(!ConnectionModule->CertificationConnection->InTransaction)
{
ConnectionModule->CertificationConnection->StartTransaction();
try
{
TableInfo.Table->Post();
if(CheckNotNullable()) //Вызов функции проверки введенных полей
ConnectionModule->CertificationConnection->Commit();
else
ConnectionModule->CertificationConnection->Rollback();
}
catch (...)
{
ConnectionModule->CertificationConnection->Rollback();
}
}
Вопросы:
1. Где хранятся данные введенные в компоненты, подключенные к БД до выполнения запроса?
2. Какой запрос отправляет TUniQuery к БД при методе Post() и отправляет ли вообще?
3. Как организовать транзакцию в моем случае, когда нет явного запроса, а данные введены в форму?
4. Какие есть еще идеи по моей задаче?
Заранее спасибо!