function TCore_Etoile_server.bdconected(s1,s: TObject): string;
begin
if s is TFDConnection then
begin
TFDConnection(s).DriverName:='MSAcc';
TFDConnection(s).Params.Values['Database']:= ExtractFilePath(ParamStr(0)) + 'db\User_BD.mdb';
FDConnection1.Connected := True;
if s1 is TFDQuery then
TFDQuery(s1).Active:=true;
end;
end;
Для начала можно просто скопировать и вставить путь типа ...Values['Database'] := 'C:\.....\db.mdb';
Если заработало — вывести куда-нибудь значение ExtractFilePath(ParamStr(0)) и смотреть что там не так.
function TCore_Etoile_server.bdconected(s2:string;s1,s: TObject): string;
begin
if s is TFDConnection then
begin
TFDConnection(s).DriverName:='MSAcc';
TFDConnection(s).Params.Values['Database']:=s2;
TFDConnection(s).Connected := True;
if s1 is TFDQuery then
TFDQuery(s1).Active:=true;
end;
end;
вот вызов:
procedure TUser_list_Etoile_server.CornerButton2Click(Sender: TObject);
var
path:string;
begin
path:='I:\User\Documents\Embarcadero\Studio\Projects\Rad Studio\delphi\étoile\étoile server\Win64\Debug\bd\User_BD.mdb';//ExtractFilePath(ParamStr(0)) + 'db\User_BD.mdb';
Core_Etoile_server.bdconected(path,Core_Etoile_server.FDQuery1,Core_Etoile_server.FDConnection1);
end;
такой драйвер есть на ПК или это дефолтное обозначение Access’a?
так аксес обозначает фаердак
Глупый вопрос, но имеет право быть ;), файл-то есть в корне І?
Да, но начало не был там, потом переместила в корень. Мне конечно удобнее чтобы он был здесь: TFDConnection(s).Params.Values['Database']:= ExtractFilePath(ParamStr(0)) + 'db\User_BD.mdb';
описание функции на одной форме вызываться на другой
function TForm2.bdconected(s2: string; s1, s: TObject): string;
begin
if (s is TFDConnection) and (s1 is TFDQuery) then
begin
TFDConnection(s).DriverName:='MSAcc';
TFDConnection(s).Params.Values['Database']:=s2;
TFDQuery(s1).SQL.add('select*From User_Grid');
TFDConnection(s).Connected := True;
TFDQuery(s1).Active:=true;
end;
{if (TFDConnection(s).Connected=true) and (TFDQuery(s1).Active=true) then
Result:='successfully'; }
end;
я это знаю но это адо компоненты а у меня FD компоненты и путь должен быть относительный чтобы можно было запустить на другом компе поэтому в функцию предаю объекты и там присваиваю им необходимые значения кроме того у меня не делфи 7 а радстудио Берлин в ней нет DBEdit, DBMemo DBNavigator, DBGrid.
Я использующую FDconnection линк настроен нужен относительный путь чтобы на любом коме работало
FDconnection нет тех полей из которых можно получить содержимое коннекта. Как только подключаюсь через визуальное меню все норм как только в обход все ломается
unit Core;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,
FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async,
FireDAC.Phys, FireDAC.FMXUI.Wait, FireDAC.Stan.Param, FireDAC.DatS,
FireDAC.DApt.Intf, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet,
FireDAC.Comp.Client, FireDAC.Phys.MSAcc, FireDAC.Phys.MSAccDef;
type
TForm2 = class(TForm)
FDQuery1: TFDQuery;
FDConnection1: TFDConnection;
FDManager1: TFDManager;
private
{ Private declarations }
public
function bdconected(s2:string;s1,s{,sd}: TObject): string; { Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
function TForm2.bdconected(s2: string; s1, s{,sd}: TObject): string;
begin
if s is TFDConnection then
begin
TFDConnection(s).Params.DriverID:='MSAcc';
TFDConnection(s).Params.Database:=s2;
TFDConnection(s).Params.Encoding='UTF8';
TFDConnection(s).LoginPrompt:=false;
end;
if s1 is TFDQuery then
begin
TFDQuery(s1).SQL.Text:='select*From User_Grid';
TFDQuery(s1).Connection.Connected:=true;
TFDQuery(s1).Active:=true;
end;
{if s is TFDManager then
begin
{ TFDManager(sd).DriverDefFileName:='Some path to FDDrivers.ini';
TFDManager(sd).DriverDefFileAutoLoad:=true;
TFDManager(sd).GetCatalogNames(ExtractFilePath(ParamStr(0)) +'FDDrivers1.ini');
end;
{if (TFDConnection(s).Connected=true) and (TFDQuery(s1).Active=true) then
Result:='successfully'; }
end;
end.
Так если правильно понял, цель отвязать приложение от среды разработки. А в коде вижу все до наоборот. Привязка к полному конкретному адресу.
Делайте относительный адрес. Например папка date содержит базу. Так и укажите относительно: date\base.mdb. Для отладочной версии папка date помещается в debug, финальная в release.