PDA

View Full Version : استفاده از بانک اطلاعاتی در برنامه های موبایل



RahmanAmiriSh
سه شنبه 05 آبان 1394, 18:49 عصر
سلام دوستان ،
من خیلی گشتم ولی نتونستم یه راهنمایی خوب پیدا کنم ،

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

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

ابوالفضل عباسی
چهارشنبه 06 آبان 1394, 07:53 صبح
سلام دوست من
من کامپوننت های 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
چهارشنبه 06 آبان 1394, 16:47 عصر
حالا برای insert و delete و edit و ... راحت کارت رو انجام بده بدون مشکل فقط در اندروید باید بانکت رو در مسیری بگذاری و در رخداد onshow فرمت باید fdconnection آدرسش رو جایی بدی که بانکت هست مثلا(اگر میخوای از sqlite استفاده کن


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

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

ابوالفضل عباسی
پنج شنبه 07 آبان 1394, 11:13 صبح
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
پنج شنبه 07 آبان 1394, 18:34 عصر
جناب عباسی ضمن تشکر ،
شما منظور من رو متوجه نشدید ،
1- منظور من استفاده از دستورات SQL بود نه خود بانک SQL
2- من از همون FDTable هم استفاده کردم موقع اجرا خطا میده ، تصویر خطا اینجا هست ، نمی دونم چشه ...
3- اگه براتون امکان داره یه نمونه سورس ساده بزارید ...

136342

RahmanAmiriSh
جمعه 08 آبان 1394, 11:42 صبح
من تقریبا تونستم تمام مشکلات رو حل کنم اما به یه مشکل جدید برخوردم ...
مشکل اینه که وقتی دیتابیس رو به فایل APK می چسبونم کلا برنامه روی گوشی اجرا نمیشه ....
Project , Deployment از اینجا فایل رو میچسبونم و RemootPath را به assets\internal\ تغییر میدم اما بازم مشکل پا برجاست ....

RahmanAmiriSh
جمعه 08 آبان 1394, 12:32 عصر
واااااای دیووونه شدم ...

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

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

136342

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

موفق باشیم

RahmanAmiriSh
شنبه 09 آبان 1394, 22:20 عصر
سلام
اینکه بیچاره خوودش داره میگه مشکل چیه! یدونه کامپوننت FDGUIxWaitCursor بزار روی فرم مشکل این خطا رفع میشه!

موفق باشیم

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

ابوالفضل عباسی
سه شنبه 12 آبان 1394, 12:38 عصر
سلام
دوست عزیز ببخشید من بعلت برخی مسائل فقط سه شنبه ها و چهارشنبه ها درخدمتم شرمنده.
خوب مشکل پیغامت رو که حل کردی باریکلا.
بعد در موقعی که 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
پنج شنبه 14 آبان 1394, 13:22 عصر
نه دوست عزیز این راه شما خوبه منتها با اضاف کردن System.IOUtils در قسمت Uses یه رکورد به نام TPath در اختیارت قرار میده که به این صورت راحت می تونی بانکت رو فراخوانی کنی :

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

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

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

arezoo_sh
سه شنبه 05 مرداد 1395, 17:56 عصر
سلام

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

ابوالفضل عباسی
چهارشنبه 06 مرداد 1395, 08:46 صبح
سرعت و کم حجم بودن کامپوننت های firedac مزیت حساب می شود که از unidac استفاده نکنیم.
اما unidac هم جواب گو هست.
مثال های دلفی برای firedac بیشتر از unidac است یعنی دلفی بیشتر firedac رو پیشنهاد میکنه.