Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
ВнизРедактирование данных по сети Найти похожие ветки
← →
saNat © (2008-04-09 10:25) [0]Доброго времени суток, Мастера (:
Обнаружил в проекте проблему. Приложение соединяется с БД посредством ADO. Путь хранится в отдельном файле конфигурации. Если подключаться к БД локально, т.е. указан путь типа C:\MyApp\MyDB.mdb, то все операции выполняются корректно. Если же указан сетевой путь, например, \\PC\MyBase\MyDB.mdb, то возникают ошибки.
Подключение к БД:
TDBModule=Class(TDataModule)
DBConnection :TADOConnection;
DBQuery: TADOQuery;
Procedure DataModuleCreate(Sender:TObject);
Procedure DBConnectionBeforeConnect(Sender:TObject);
{-----вырезано-----}
Private
FDBPath :String;
{-----вырезано-----}
Function GetDBConnect:Boolean;
Procedure SetDBConnect(Value:Boolean);
Function GetDBPath:String;
Procedure SetDBPath(Value:String);
{-----вырезано-----}
Public
Published
Property DBConnect:Boolean
Read GetDBConnect
Write SetDBConnect;
Property DBPath:String
Read GetDBPath
Write SetDBPath;
{-----вырезано-----}
End;
{-----вырезано-----}
Function TDBModule.GetDBConnect:Boolean;
Begin
Result:=DBConnection.Connected;
End;
Procedure TDBModule.SetDBConnect(Value:Boolean);
Begin
Try
DBConnection.Connected:=Value;
Except
MessageDlg("Ошибка соединения с базой данных.",mtWarning,[mbOk],0);
End;
End;
Procedure TDBModule.DBConnectionBeforeConnect(Sender:TObject);
Begin
DBConnection.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source=""+FDBPath+"";"+
"Persist Security Info=False;"+
"Jet OLEDB:Database Password=0322907";
End;
Пример использования:
Procedure TDeskTop.PostDeleteClick(Sender:TObject);
Begin
If Not DBModule.DBConnect
Then
DBModule.DBConnect:=True;
If DBModule.DBConnect And
(PostList.ItemIndex<>-1) And
(MessageDlg("Восстановление удаленных данных невозможно. Продолжить?",mtConfirmation,[mbYes,mbNo],0)=mrYes)
Then
Begin
Try
DBModule.DBQuery.Close;
DBModule.DBQuery.SQL.Clear;
DBModule.DBQuery.SQL.Add("Delete From Должности");
DBModule.DBQuery.SQL.Add("Where (Наименование=:UserPost)");
DBModule.DBQuery.Parameters.ParseSQL(DBModule.DBQuery.SQL.Text,True);
DBModule.DBQuery.Parameters.ParamByName("UserPost").Value:=PostList.Items.String s[PostList.ItemIndex];
DBModule.DBQuery.ExecSQL;
DBModule.DBQuery.Close;
DBModule.DBQuery.SQL.Clear;
PageControl.OnChange(Self);
Except
MessageDlg("Удаление записи в данный момент невозможно.",mtWarning,[mbOk],0);
End;
End;
End;
В случае "сетевого подключения" при попытке выполнить запрос получаю сообщение IDE "....EOLEException with message "Невозможно удаление записей из указанных таблиц"..."
← →
saNat © (2008-04-09 10:30) [1]Вот еще пример: хочу вставить новую запись:
Function TDBModule.GetUserCreate:Boolean;
Begin
Result:=True;
DBQuery.Close;
DBQuery.SQL.Clear;
DBQuery.SQL.Add("Select Идентификатор From Пользователи");
DBQuery.SQL.Add("Where (Пользователь=:UserName)");
DBQuery.Parameters.ParseSQL(DBQuery.SQL.Text,True);
DBQuery.Parameters.ParamByName("UserName").Value:=UserName;
DBQuery.Open;
DBQuery.First;
If DBQuery.EOf
Then
Begin
DBQuery.Close;
DBQuery.SQL.Clear;
DBQuery.SQL.Add("Insert InTo Пользователи (Пользователь,Пароль,Тип,Статус)");
DBQuery.SQL.Add("Values (:UserName,:UserPassword,2,0)");
DBQuery.Parameters.ParseSQL(DBQuery.SQL.Text,True);
DBQuery.Parameters.ParamByName("UserName").Value:=UserName;
DBQuery.Parameters.ParamByName("UserPassword").Value:=UserPasword;
DBQuery.ExecSQL;
End
Else
Begin
MessageDlg("Учетная запись ""+UserName+"" существует.",mtWarning,[mbOk],0);
Result:=False;
End;
DBQuery.Close;
DBQuery.SQL.Clear;
End;
Получаю ошибку: "В операции должен использоваться обновляемы запрос"
Предполагаю, что в строке подключения чего-то нехватает. Подскажите, пожалуйста.
← →
sniknik © (2008-04-09 10:41) [2]> В операции должен использоваться обновляемы запрос
так понимаю справки у тебя в аксессе нет, или на F1 нажать не в состоянии...
> Подскажите, пожалуйста.
так и быть. нажал за тебя -
В операции должен использоваться обновляемый запрос. (Ошибка 3073)
Попытка запустить, открыть или изменить запрос, который не является обновляемым.
Возможные причины:
Попытка запустить запрос, в котором предпринимается попытка обновить необновляемое поле. Например, создан запрос, в котором предпринимается попытка обновить поле на стороне «один» отношения «один-ко-многим».
Попытка использовать устаревший метод OpenQueryDef для запроса, находящегося в базе данных, открытой с доступом только для чтения.
База данных может быть доступной только для чтения по одной из следующих причин:
База данных была открыта только для чтения с помощью метода OpenDatabase или элемента управления Data Visual Basic.
Файл базы данных определен с доступом только для чтения в сетевой операционной системе.
Пользователь не имеет привилегий записи в этот файл базы данных в сетевой среде.
Закройте базу данных, снимите ограничение доступа только для чтения и вновь откройте файл с доступом для чтения/записи.
Отсутствуют разрешения на внесение изменений в запрос. Для изменения разрешений обратитесь к системному администратору или создателю таблицы или запроса.
← →
saNat © (2008-04-09 10:49) [3]Голова сегодня работать отказывается. Спасибо Вам (: - доступ был только на чтение.
Ветку можно закрыть.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c