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

Вниз

Несколько вопросов о работе с БД Access   Найти похожие ветки 

 
Kostafey ©   (2006-01-30 19:54) [40]


> Тяжело повторить код, приведенный в [37] ?

Да нет не тяжело, просто на такой код он выдает:
Не было задано свойство доступное только для чтения

> Data Source=db1.mdb
> а не
> Data Source=База данных MS Access

А это имеет какое-то значение ???
Мне показальсь что собственно путь задается:
ADOConnection1.Properties["Data Source"].Value:=nastr.basepath;

Ну да не важно, как я и говорил, код

function Start_DataBase(FileName:string):boolean;
begin
 BEGIN
   DB_Path:="C:\Program Files\PRG_all\PRG_Code\PRO_Code_Store\Code_Store_v1.01\AccessDB.mdb";
   with DataModule1 do
   begin
     ADOConnection1.Connected:=False;
     ADOConnection1.ConnectionString:=
       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=AccessDB.mdb;Persist Security Info=False";
     ADOConnection1.Properties["Data Source"].Value:=DB_Path;
     ADOConnection1.Connected:=true;
     ADOTable1.Active:=true;
     ADOTable2.Active:=true;
     ADOTable3.Active:=true;
     ADOQuery_Full.Active:=true;
     ADOQuery1.Active:=true;
     DataSource_Code.Enabled:=true;
     DataSource_Source.Enabled:=true;
     DataSource_Autor.Enabled:=true;
     DataSource1.Enabled:=true;
     DataSource2.Enabled:=true;
     DataSourceQuery.Enabled:=true;
   end;
   GridIni;
   Start_DataBase:=true;
 END;
end;
выдает: Не было задано свойство доступное только для чтения
вот.


 
Kostafey ©   (2006-01-30 20:14) [41]

И еше одна интересная штука.
Начал экспериментировать с пустой программой
Provider=Microsoft.Jet.OLEDB.4.0
Совершенно не хочет работать с запросом самого Access- файла.
Выдает: "Неопознанная ошибка".
К таблицам  подключает - не вопрос.
Приходится дополнительный Query делать.


 
YurikGL ©   (2006-01-30 22:14) [42]


> выдает: Не было задано свойство доступное только для чтения

На какую строчку?


> Совершенно не хочет работать с запросом самого Access- файла.
Код давай....


 
Kostafey ©   (2006-01-31 01:01) [43]


> > выдает: Не было задано свойство доступное только для чтения
>
> На какую строчку?

На включение базы: (притом одинаково будь то run-time, либо Object Inspector)

ADOConnection1.Connected:=true;


> > Совершенно не хочет работать с запросом самого Access-
>  файла.
> Код давай....

Нулевой проект.
UDataModule - DataModule1
Unit1 - Form1
ПРИВОЖУ ВЕСЬ:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids, DBGrids, UDataModule, IniFiles;

type

TNastr=Record
  basepath:string
  end;

 TForm1 = class(TForm)
   DBGrid1: TDBGrid;
   procedure FormShow(Sender: TObject);
   procedure LoadNastr;
 private
   { Private declarations }
 public
   nastr:TNastr;
   { Public declarations }
 end;

var
 Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
 loadnastr;
 with DataModule1 do begin
 ADOConnection1.Connected:=False;
 ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb;Persist Security Info=False";
 ADOConnection1.Properties["Data Source"].Value:=nastr.basepath;
 ADOConnection1.Connected:=true;
 ADOTable1.Active:=true;
 DataSource1.Enabled:=true;
 end;
end;

procedure TForm1.LoadNastr;
var
IFl:TIniFile;
Begin
IFl:=TIniFile.Create(ExtractFilePath(Application.ExeName)+"mail.ini");
if FileExists(ExtractFilePath(Application.ExeName)+"mail.ini") then
  Form1.Nastr.basepath:=IFl.ReadString("Database options","Path",Form1.Nastr.basepath)
                         else Form1.Nastr.basepath:="db1.mdb";//путь по умолчанию
IFl.Free;
End;

end.

При этом в код UDataModule я вручную ничего не вписывал.
В свойстве ADOTable TableName = "Full" - имя запроса.
Выдает: "Неопознанная ошибка"
Если заменить на имя таблицы TableName = "Code" - все нормально работает

mail.ini содержит:
[Database options]
Path=db1.mdb

db1.mdb - находится в каталоге программы, в файле есть запрос и таблицы.


 
Kostafey ©   (2006-01-31 22:24) [44]

Прошу прощения за назойливость, может то-нибудь ответит на

> Kostafey ©   (31.01.06 01:01) [43]


 
Kostafey ©   (2006-02-01 17:32) [45]

Еще раз 10^3 извинений: возвращаю тему на верх форума


 
sniknik ©   (2006-02-01 20:37) [46]

говорил же не пользуйся ADOTable (в данном случае он конечно не при чем, но разве трудно изначально начинать с "правильных" компонент? ADOTable/ADOQuery "неправильные" не пользуйся ими )

для ADODataSet делай запрос SELECT * FROM [Full]
(Full подозрительно похоже на какоето зарезервированное слово, во всяком случае может быть им, поэтому кавычки)

если делать аналог с ADOTable  (датасет с установленным cmdTable вместо cmdText по умолчанию) то просто указывай [Full] в командной строке (оно так и вставится в формируемый компонентом запрос, и если слово зарезервировано ошибки не будет)


 
Kostafey ©   (2006-02-01 21:03) [47]


> sniknik ©   (01.02.06 20:37) [46]
>
> говорил же не пользуйся ADOTable (в данном случае он конечно
> не при чем, но разве трудно изначально начинать с "правильных"
> компонент? ADOTable/ADOQuery "неправильные" не пользуйся
> ими )

Интересно, а почему же все-таки вы их так не любите ?
Ладно, прогу я сегодня думаю закончить !

ПОДВОЖУ ИТОГИ
Отвечаю на свои вопросы так как я понял по итогам ветки форума:
 1)Есть некая БД, которая корректно работает только на PC с установленной Delphi и Access. Возможность запуска БД на PC без Delphi (но при условии наличия установленной Access) обеспечивает библиотека qtintf70.dll. Однако хотелось бы достичь независимоти программы и от самой Access. (При отсутствии Access выдает сообщение о том что не может найти драйвера по умолчанию).
При Provider=MSDASQL.1 нормально работающую программу на не девелоперском компе написать практически невозможно (по целому ряду причин).
При Provider=Microsoft.Jet.OLEDB.4.0 Невозможно непосредственно поделючится к запросу через ADOTable.
Запрос на подключение qtintf70.dll. при доступе к БД через ADO - результат случайного добавления в подключаемые модули QT.
Вообще Delphi - программа может работать с Access - базой без каких-либо ухищрений, без наличия установленной Access.
 2)Даже при наличии на PC СУБД Acess и библиотеки qtintf70.dll, но отсутствии самой Delphi сетка (DBGrid) не отображет талицы, а только запросы - имеются ввиду не компоненты Table\Query, а таблицы и запросы самого файла БД (на PC с Delphi - все отображается без проблем)
Кстати, редкий случай, как правило, не показывается ничего.
Provider должен быть Microsoft.Jet.OLEDB.4.0
3)Как лучше всего произвести обновление отображения (например в той же сетке) изменений информации. Refresh - ничего не дает. Я же просто закываю и затем заново открываю наборы данных (Active:=false/true) - ясно, что это не рационально.
Можно и так.

Благодарю всех за оказанную помошь !
СПЕШИАЛ СЭНЬКС ФО
YurikGL
sniknik


 
Almaz ©   (2006-02-02 02:25) [48]


> 3)Как лучше всего произвести обновление отображения (например
> в той же сетке) изменений информации. Refresh - ничего не
> дает. Я же просто закываю и затем заново открываю наборы
> данных (Active:=false/true) - ясно, что это не рационально.
>
> Можно и так.

Для TADODataSet , ИМХО, лучше использовать метод Requery (не путать с Refresh ;))

Удачи.


 
msguns ©   (2006-02-02 09:23) [49]

Сколько просыпано бисера впустую ;((
Просьба не обижаться ;)



Страницы: 1 2 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.033 c
2-1138809656
maxim161
2006-02-01 19:00
2006.02.19
MonAPI


2-1138099753
Змей
2006-01-24 13:49
2006.02.19
регулировка звука(только не баньте тему плз)


2-1138550534
49 Cent
2006-01-29 19:02
2006.02.19
Можно ли сделать такой запрос?


2-1138760750
Приятель
2006-02-01 05:25
2006.02.19
Как открепить панельку от основного окна?


2-1138685327
Аноним
2006-01-31 08:28
2006.02.19
удалить запись из ListBox