Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.006 c
2-1207644025
asdf2
2008-04-08 12:40
2008.05.04
перерисовка формы-заставки


15-1205840565
GRAND25
2008-03-18 14:42
2008.05.04
Новый IBExpert - сволочь!


15-1206361369
xayam
2008-03-24 15:22
2008.05.04
помогите пожалуйста с математикой


15-1206227132
Petr V. Abramov
2008-03-23 02:05
2008.05.04
Вакансия Delphi программист


2-1207717907
Layner
2008-04-09 09:11
2008.05.04
Помогите конвернтнуть UTF8 в Win1251





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский