# Native Code > برنامه نویسی در Delphi > برنامه نویسی موبایل در Delphi >  استفاده از بانک اطلاعاتی در برنامه های موبایل

## RahmanAmiriSh

سلام دوستان ، 
من خیلی گشتم ولی نتونستم یه راهنمایی خوب پیدا کنم ، 

من مشغول نوشتن یک برنامه برای اندروید هستم که نیاز دارم تو برنامه از بانک اطلاعاتی استفاده کنم ، برای این کار :
1- اول با استفاده از fdcoonection  یک بانک از نوع sqllite با پسوند *.s3db ساختم .
2- با استفاده از یک fdquery تونستم یک جدول بسازم .

اما برای Insert کردن اطلاعات به مشکل برخوردم ، متأسفانه از هر روشی که استفاده کردم نتونستم کاری بکنم ، اگه دوستان راهنمایی بکنن ممنونم ،

----------


## ابوالفضل عباسی

سلام دوست من
من کامپوننت های FireDac در حد حرفه ای اشنا هستم و کمکت میکنم:
1- از توی اینترنت برنامه SQLite Expert Professional رو دانلود کن و یک بانک با پسوند هایی که داره بساز.
2- در برنامه ات fdconnection و fdtable بیار این ها رو وصل کن و بانکت رو بیار بعد مقدار جدولت رو از table بگیر.
حالا برای insert و delete و edit و ... راحت کارت رو انجام بده بدون مشکل فقط در اندروید باید بانکت رو در مسیری بگذاری و در رخداد onshow فرمت باید fdconnection آدرسش رو جایی بدی که بانکت هست مثلا(اگر میخوای از sqlite استفاده کنی):
FDConnection.Params.Text:='';    FDConnection.Params.Database:=ExePath+'data.db3';
    FDConnection.ConnectionDefName:='SQLite_Demo';
    FDConnection.DriverName:='SQLite';
    FDConnection.Params.DriverID:='SQLite';
    FDConnection.Connected:=true;
    FDtable.Active:=true;

این exepath یک متغیر عمومی از نوع String هست که موقع create شدن فرم اصلی پر میشه مثلا:
exepath:=/sdcard/data/
sdcard حافظه اصلی گوشی اندروید هست.نه حافظه خارجی.
بعد راحت بابانکت کارکن.

----------


## RahmanAmiriSh

حالا برای insert و delete و edit و ... راحت کارت رو انجام بده بدون مشکل فقط در اندروید باید بانکت رو در مسیری بگذاری و در رخداد onshow فرمت باید fdconnection آدرسش رو جایی بدی که بانکت هست مثلا(اگر میخوای از sqlite استفاده کن


تشکر می کنم دوست بزرگوار و دوست داشتنی ، از علم شما خیلی استفاده بردم تا حالا ، 

دوست گلم آیا برای این کار از fdtable استفاده کنم یا fdquery ؟
از طرفی من با دستورات SQL آشنا هستم آیا با fdtable می تونم از دستورات SQL استفاده کنم ...!!! فکر نمی کنم بشه ...
آیا راهی هست که بشه از FDQuery استفاده کرد.
در زمینه ساپورت کردن زبون فارسی باید چیکار کنم ، یک کامپوننت هم دوستان معرفی کردن که متاسفانه برای XE7 جواب نداد ...
و موضوع آخر اینکه کامپوننت های DB توحالت موبایل وجود نداره درسته ؟ مثل DBGride ، DBEdite و.... اگه هست تو کدوم تب ...؟؟؟

----------


## ابوالفضل عباسی

1-اگر datasnap نیست بهتره از Fdtable استفاده کنی تا Fdquery 
2-چرا کامپوننت های firedac هم به My SQLوصل میشن و هم به MSSQL.
3-خب وقتی از sql استفاده میکنید از sqlconnection و sqlquery استفاده کن،اینطوری نیازی به firedac نداری و هم میتونی از sqlquery استفاده کنی.
4-مشکل فارسی حل نشده. دوست عزیز nice boy در همین زمینه یه یونیتی فارسی گذاشتند که فارسی رو تا حدودی حل کرده.برای بانک اطلاعاتی هم خوب کارمیکنه.
5-خیر باید از edit استفاده کنید و با جای dbgrid از String grid , bindinglist استفاده کنید و در موبایل باید جدول رو خودتون بسازید(آموزش ساخت جدول با String grid توی سایت های خارجی هست و هم sample دلفیش در مسیر برنامه وجود داره.) :بامزه: 

موفق باشی :چشمک:

----------


## RahmanAmiriSh

جناب عباسی ضمن تشکر ، 
شما منظور من رو متوجه نشدید ، 
1- منظور من استفاده از دستورات SQL بود نه خود بانک SQL 
2- من از همون FDTable هم استفاده کردم موقع اجرا خطا میده ، تصویر خطا اینجا هست ، نمی دونم چشه ...
3- اگه براتون امکان داره یه نمونه سورس ساده بزارید ...

Eroor.jpg

----------


## RahmanAmiriSh

من تقریبا تونستم تمام مشکلات رو حل کنم اما به یه مشکل جدید برخوردم ...
مشکل اینه که وقتی دیتابیس رو به فایل APK می چسبونم کلا برنامه روی گوشی اجرا نمیشه ....
Project , Deployment  از اینجا فایل رو میچسبونم و RemootPath را به assets\internal\ تغییر میدم اما بازم مشکل پا برجاست ....

----------


## RahmanAmiriSh

واااااای دیووونه شدم ...

جناب عباسی عزیز کدی که برای فراخوانی بانک گذاشتید کار نمی کنه ....
اول که به exepath گیر میده بعد که من ecxepath رو از نوع string تعریف کردم ، حالا برنامه اجرا که می شه خطا میده و می گه نمیتونم بانک رو پیدا کنم ...

----------


## hp1361

> جناب عباسی ضمن تشکر ، 
> شما منظور من رو متوجه نشدید ، 
> 1- منظور من استفاده از دستورات SQL بود نه خود بانک SQL 
> 2- من از همون FDTable هم استفاده کردم موقع اجرا خطا میده ، تصویر خطا اینجا هست ، نمی دونم چشه ...
> 3- اگه براتون امکان داره یه نمونه سورس ساده بزارید ...
> 
> Eroor.jpg


سلام
اینکه بیچاره خوودش داره میگه مشکل چیه! یدونه کامپوننت FDGUIxWaitCursor بزار روی فرم مشکل این خطا رفع میشه!

موفق باشیم

----------


## RahmanAmiriSh

> سلام
> اینکه بیچاره خوودش داره میگه مشکل چیه! یدونه کامپوننت FDGUIxWaitCursor بزار روی فرم مشکل این خطا رفع میشه!
> 
> موفق باشیم


این رو هم همون روز حل کردم و فقط مونده مشکل فارسی

----------


## ابوالفضل عباسی

سلام 
دوست عزیز ببخشید من بعلت برخی مسائل فقط سه شنبه ها و چهارشنبه ها درخدمتم شرمنده.
خوب مشکل پیغامت رو که حل کردی باریکلا.
بعد در موقعی که Fdconnection قرار هست کارکنه باید قبل از اجرا و کامپایل کردن اگر Fdconnection بخش connect وصل هست باید false کنی و درضمن برای تمامی کامپوننت های firedac که active یا connect دارند رو false کنی و بعد کامپایل بگیری.
اصلا به تنظیمات deployment دست نگذار و تغییر نده در مسیر موبایلت یه پوشه ایجاد کن به اسم مثلا data بعد متغیر exepath  رو اینطوری مقدار بده:
exepath:='/sdcard/اسم پوشه دلخواه/'
باید درست کارکنه بشرطی که از دستوراتی که اون بالا برای پرکردن fdconnection گفتم رو درست نوشته باشی.
بعد یه فرمان try اضافه کن به این صورت:
    FDConnection.Params.Text:='';    FDConnection.Params.Database:=ExePath+'MessageData  .db3';
    FDConnection.ConnectionDefName:='SQLite_Demo';
    FDConnection.DriverName:='SQLite';
    FDConnection.Params.DriverID:='SQLite';
    try
      FDConnection.Connected:=true;
      if FDConnection.Connected then
        FDMessage.Active:=true;
    except
      ShowMessage('اتصال برقرار نشد');
    end;
که اگر برقرار نشد بفهمی اشکال از کجاست.
من خودم دارم در اندروید از بانک اطلاعاتی استفاده میکنم و به مشکلی برنخورده ام؟!!!
درضمن باید صبر کنید تا مشکل فارسی حل بشه. :لبخند:

----------


## RahmanAmiriSh

نه دوست عزیز این راه شما خوبه منتها با اضاف کردن System.IOUtils در قسمت Uses یه رکورد به نام TPath در اختیارت قرار میده که به این صورت راحت می تونی بانکت رو فراخوانی کنی :

FDConnection1.Params.Values['Database'] :=
TPath.Combine(TPath.GetDocumentsPath, 'dbdemos.gdb');

الان تنها مشکل من اینه که وقتی برنامه رو اجرا می کنم فیلدهای فارسی رو به صورت ؟؟؟؟؟؟؟؟؟؟ نشون میده .... :ناراحت: 
از این کامپوننت dpf delphi  هم نتونستم استفاده کنم ، چون اطلا نصب نمی شه .... :قهقهه: 
ای کاش یه راه حلی برای این موضوع فارسی پیدا می شد .... :خیلی عصبانی:

----------


## ابوالفضل عباسی

بله اون کامپوننت dpf اگر استفاده کنی دیگه نمی تونی از کامپوننت های پیشفرض دلفی استفاده کنی. :عصبانی: 
حالا من امیدوارم مشکل فارسی حل بشه. :لبخند:

----------


## arezoo_sh

سلام

برای استفاده راحت از بانک اطلاعاتی در آندروید در محیط دلفی میتوانید از کامپوننت Devart UniDAC استفاده نمایید.

----------


## ابوالفضل عباسی

سرعت و کم حجم بودن کامپوننت های firedac مزیت حساب می شود که از unidac استفاده نکنیم.
اما unidac هم جواب گو هست.
مثال های دلفی برای firedac بیشتر از unidac است یعنی دلفی بیشتر firedac رو پیشنهاد میکنه.

----------

