Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.04;
Скачать: CL | DM;

Вниз

Редактирование данных по сети   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
15-1205932450
sniknik
2008-03-19 16:14
2008.05.04
Сохранить картинку (jpg/bmb/...) из "блочного" редактора


2-1207744045
Снежинка
2008-04-09 16:27
2008.05.04
Пароль


3-1196422520
Delpher555
2007-11-30 14:35
2008.05.04
Как удалить/(снять атрибут) PRIMARY и FOREIGN KEY с поля?..


9-1169641924
k8
2007-01-24 15:32
2008.05.04
координаты мышки в пространстве


2-1207582041
Artin
2008-04-07 19:27
2008.05.04
Несколько раюочих столов в Windowse. Как в Линуксе.