Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизНесколько вопросов о работе с БД 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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.046 c