جعل الربط ديناميكي في الإتصال بقاعدة البيانات
#1
السلام عليكم






أواجه مشكلة في جعل الربط ديناميكي في الإتصال بقاعدة بيانات Access مع Delphi

حيث لدي في ConnectionString ما يلي

PHP كود :
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=Base\DB.mdb;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False; 


كما تلاحظون

Data Source=Base\DB.mdb

ملف قاعدة البيانات DB.mdb وضعته داخل مجلد يحمل إسم Base و الملف التنفيذي في نفس مسار هذا الأخير ( مجلد يحمل إسم Base ) لكن يأتيني خطأ في الإتصال

و لما أغير Data Source بالتالي

Data Source=D:\Program Files\Test\Base\DB.mdb

و هو مسار القاعدة الثابت يتصل البرنامج بدون مشاكل

لكني أود جعل المسار ديناميكي ، و شكراً للقائمين على هذا المنتدى الرائع
الرد
#2
وعليكم السلام و رحمة الله

Data Source=
كود :
ExtractFilePath(Application.ExeName)+\Base\DB.mdb
بالتوفيق
الرد
#3
وعليكم السلام
يمكن تشغيل البرنامج مع استرجاع المسار إليه (أضف في الملف dpr)
PHP كود :
{$R *.res}

begin
  SetCurrentDir
(ParamStr(0));//uses SysUtils
  
Application.Initialize;
  
Application.CreateForm(TForm1, Form1); 
وقد يتغير أثناء العمل بالبرنامج (عند استخدام TCommonDialog مثلا)، حينها ينبغي استدعاء SetCurrentDir ثانية...
بالتوفيق.
الرد
#4
Lam.Abdeldjalil كتب :وعليكم السلام و رحمة الله

Data Source=
كود :
ExtractFilePath(Application.ExeName)+\Base\DB.mdb
بالتوفيق

شكراً على الرد أخي

لكن الطريقة لم تنجح ! أضفت ExtractFilePath(Application.ExeName) كما كتبتها لكن يأتيني خطأ
الرد
#5
kachwahed كتب :وعليكم السلام
يمكن تشغيل البرنامج مع استرجاع المسار إليه (أضف في الملف dpr)
PHP كود :
{$r *.res}

begin
  setcurrentdir
(paramstr(0));//uses sysutils
  
application.initialize;
  
application.createform(tform1, form1); 
وقد يتغير أثناء العمل بالبرنامج (عند استخدام tcommondialog مثلا)، حينها ينبغي استدعاء setcurrentdir ثانية...
بالتوفيق.


لم أفهم جيداً ممكن توضح أكثر جزاك الله خيراً
الرد
#6
السلام عليكم
استخدم ال odbc
الرد
#7
السلام عليكم

إقتباس : لكن الطريقة لم تنجح ! أضفت ExtractFilePath(Application.ExeName) كما كتبتها لكن يأتيني خطأ
أين أضفتها ؟
كود :
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(Application.ExeName)+'\Base\DB.mdb;Persist Security Info=False';
بالتوفيق
الرد
#8
وعليكم السلام و رحمة الله

إقتباس : استخدم ال odbc
هو يستخدم الـ Ado مع Access من الأفضل إستخدام OleDb ـ Smile
الرد
#9
Lam.Abdeldjalil كتب :السلام عليكم

أين أضفتها ؟


هنا

PHP كود :
http://i.imgur.com/Z2UkI.png 

إذا كان غلط دلني أين أضيفه ؟
الرد
#10
السلام عليكم

حين ذكرت ' ديناميكيا ' حسبتها برمجيا Smile

تابع هذا الرابط
http://www.delphi4arab.net/forum/showthr...p?tid=1572

على كل ، برمجيا ما عليك إلا إضافة سطر واحد فقط قبل الإتصال :
كود :
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(Application.ExeName)+'\Base\DB.mdb;Persist Security Info=False'; ADOConnection1.Connected:=true;
بالتوفيق
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم