انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آرایه دو بعدی پویا (در sqlite) (برنامه نویسی اندروید)

آرایه دو بعدی پویا (در sqlite) (برنامه نویسی اندروید)

#1
من یه بانک اطلاعاتی از نوع Sqlite  دارم. اطلاعات  به راحتی اضافه ، ویرایش ، حذف و نمایش داده میشه . بانک اطلاعات به شکل زیر است:
سه تا ستون دارم نام-شرح-مبلغ که یه سری اطلاعات توش وارد شده.تو ستون نام ، اسامی تکراری وجود داره در واقع هر شخصی مبالغی دریافت یا پرداخت نموده. در استخراج مبالغ هر شخص با استفاده از Like هیچ مشکلی ندارم. ولی من می خوام کدی بنویسم که عنوان ستونها همون اشخاص باشه و مبالغ هر فرد تو ستون خودش بیاد و در آخر جمع مبالغ هر ستون را در زیر ستونها برام برگردونه. به نظر خودم می بایست از یه ارایه دو بعدی پویا ( با توجه به اینکه تعداد مبالغ هر فرد متفاوت هست ) استفاده کنم. ولی هر چی سرچ کردم و تلاش کردم نتونستم مشکل را حل کنم. حالا دوستان راهنمایی کنند چی کار کنم. اگه روش مناسب تری هست بهم بگید. اگه ممکنه یه نمونه کد برام بنویسید.

   
پاسخ

آرایه دو بعدی پویا (در sqlite) (برنامه نویسی اندروید)

#2
سلام.

(۱۳۹۴/۰۹/۲۱, ۰۸:۱۴ ب.ظ)Ezzat3 نوشته: در استخراج مبالغ هر شخص با استفاده از Like هیچ مشکلی ندارم.

شما نباید از like در query (دستور sql) استفاده کنید، بلکه باید تعیین کنید که مقدار ستون دقیقا برابر آن نام باشد (با علامت =). زیرا فرض کنید که دو نفر با نام های ((علی)) و ((حسین علی)) در جدول ثبت شده باشند. وقتی برای ((علی)) کلمه like را در query به کار ببرید، هر دو مورد فوق را برمی گرداند (به اشتباه).

شما یک query می نویسید که ستون ((Hesab_name)) برابر یک نام خاص (مثلا علی) باشد، یعنی به شکل زیر (بخش شرطی query) :

کد پی‌اچ‌پی:
WHERE Hesab_name 'علی' 


پس query ، تمامی داده های مربوط به ((علی)) را برمی گرداند. یک متغیر هم تعریف می کنید که مقدار اولیه آن برابر صفر باشد (مثلا با نام final_value). سپس از نتایج برگردانده شده، مقادیر ستون Hesab_value را جمع می زنید.
در مورد خواندن اطلاعات، کلید زیر را بخوانید :


کلید شماره 330

کدی را از آن ذکر می کنم (بر اساس نام های همان کلید، نه مورد شما) :

کد پی‌اچ‌پی:
String DATABASE_NAME "KELIDESTAN.db"  
String TABLE_NAME 
"MY_TABLE"
try{
 
   SQLiteDatabase mydb openOrCreateDatabase(DATABASE_NAMEContext.MODE_PRIVATE,null);
 
   Cursor allrows  mydb.rawQuery("SELECT * FROM " TABLE_NAMEnull);
 
   if(allrows.moveToFirst()){
 
       do{
 
           String ID allrows.getString(0);
 
           String NAME allrows.getString(1);
 
           String CITY allrows.getString(2);
 
                  
            
// Show values with Toast
 
           Toast.makeText(getApplicationContext(), IDToast.LENGTH_LONG).show();
 
           Toast.makeText(getApplicationContext(), NAMEToast.LENGTH_LONG).show();
 
           Toast.makeText(getApplicationContext(), CITYToast.LENGTH_LONG).show();
 
       }
 
       while(allrows.moveToNext());
 
   }
 
   mydb.close();
}catch(
Exception e){
 
   Toast.makeText(getApplicationContext(), "Error"Toast.LENGTH_LONG).show();


که قسمت زیر از آن، مربوط به کدهای اجرایی برای هر ردیف (از ردیف های برگردانده شده) می باشد (در اینجا کد مربوط به دریافت مقدار ستون Hesab_value و جمع زدن آن را انجام می دهید) (مقدار ستون، به مقدار ذخیره شده در متغیر final_value افزوده می شود) :

کد پی‌اچ‌پی:
do{
 
   String ID allrows.getString(0);
 
   String NAME allrows.getString(1);
 
   String CITY allrows.getString(2);
 
          
    
// Show values with Toast
 
   Toast.makeText(getApplicationContext(), IDToast.LENGTH_LONG).show();
 
   Toast.makeText(getApplicationContext(), NAMEToast.LENGTH_LONG).show();
 
   Toast.makeText(getApplicationContext(), CITYToast.LENGTH_LONG).show();



Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط sohrabjam

آرایه دو بعدی پویا (در sqlite) (برنامه نویسی اندروید)

#3
با عرض سلام و ممنون از زحمات مدیر محترم

خیلی ممنونم از جوابی که داده اید. در مورد استفاده از Like حق با شماست. اما عمده مشکل من در خصوص محاسبه جمع جبری ارقام همه افراد و به صورت یکجاست. من با استفاده از onListItemClick  و با کلیک بر یکی از ردیفهای لیست ویو یکی از نامهای ستون name_value را به یک اکتیویتی دیگه انتقال داده و مشکلی با فیلتر ارقام مربوط به یک نفر و محاسبه جمع جبری ارقام اون فرد ندارم. من تو اکتیویتی اول می خوام اسامی همه افراد را داشته باشم که تو این زمینه مشکلی ندارم. در کنار اون می خوام مانده( جمع جبری ارقام) هر فرد را روبروی اسامی نمایش بدم. کدی را که زحمت کشیدید برام گذاشتید به نظرم می تونه ارقام یک نفر را فیلتر و جمع جبری شون را برگردونه.من از آرایه یک بعدی طبق کد زیراستفاده کردم( با استفاده از دو متد جستجو در یک کلاس ). 


کد پی‌اچ‌پی:
private void refresh(){
 
   total =0;
 
   db.open();
 
   int s db.countـsearch(tablehesab_name_infield);
 
   mablagh2 = new Integer[s];    
    for
(int i=0;i<s;i++){
 
       mablagh2[i]= Integer.parseInt(db.serach(tablei2hesab_name_in,field)); 
 
       total total mablagh2[i];        
        String str 
String.valueOf(total);
 
       txt_hesab_datail_sum.setText(str);        
    
}
 
   setListAdapter(new AA());
 
   db.close();


امیدوارم منظورم را درست انتقال داده باشم. حالا اگه ممکنه زحمت بکشید روشی را برای محاسبه جمع جبری همه افراد جهت نمایش مقابل اسامیشون برام توضیح بدید. حتی الامکان نمونه کدی را برام بنویسید. 
پاسخ

آرایه دو بعدی پویا (در sqlite) (برنامه نویسی اندروید)

#4
اساتید محترم یکی جواب بده!
پاسخ

آرایه دو بعدی پویا (در sqlite) (برنامه نویسی اندروید)

#5
باید در query (دستور SQL) از SUM و GROUP BY به صورت همزمان استفاده کنید. در این زمینه، لینک زیر را ببینید :

http://www.w3resource.com/sql/aggregate-...oup-by.php

من کد زیر را از لینک بالا ذکر می کنم :

کد پی‌اچ‌پی:
SELECT agent_code  
SUM 
(advance_amount  
FROM orders   
GROUP BY agent_code
  

در query بالا، از جدول با نام orders ، بر اساس مقادیر یکتای ستون agent_code ، مجموع مقادیر ستون advance_amount برگردانده می شود. 
یعنی اگر جدول به صورت زیر باشد :

کد پی‌اچ‌پی:
  ORD_NUM ORD_AMOUNT ADVANCE_AMOUNT ORD_DATE  CUST_CODE       AGENT_CODE      ORD_DESCRIPTION
---------- ---------- -------------- --------- --------------- --------------- -----------------
 
   200114       3500           2000 15-AUG-08 C00002          A008
    200122       2500            400 16
-SEP-08 C00003          A004
    200118        500            100 20
-JUL-08 C00023          A006
    200119       4000            700 16
-SEP-08 C00007          A010
    200121       1500            600 23
-SEP-08 C00008          A004
    200130       2500            400 30
-JUL-08 C00025          A011
    200134       4200           1800 25
-SEP-08 C00004          A005
    200115       2000           1200 08
-FEB-08 C00013          A013
    200108       4000            600 15
-FEB-08 C00008          A004
    200103       1500            700 15
-MAY-08 C00021          A005
    200105       2500            500 18
-JUL-08 C00025          A011
    200109       3500            800 30
-JUL-08 C00011          A010
    200101       3000           1000 15
-JUL-08 C00001          A008
    200111       1000            300 10
-JUL-08 C00020          A008
    200104       1500            500 13
-MAR-08 C00006          A004
    200106       2500            700 20
-APR-08 C00005          A002
    200125       2000            600 10
-OCT-08 C00018          A005
    200117        800            200 20
-OCT-08 C00014          A001
    200123        500            100 16
-SEP-08 C00022          A002
    200120        500            100 20
-JUL-08 C00009          A002
    200116        500            100 13
-JUL-08 C00010          A009
    200124        500            100 20
-JUN-08 C00017          A007
    200126        500            100 24
-JUN-08 C00022          A002
    200129       2500            500 20
-JUL-08 C00024          A006
    200127       2500            400 20
-JUL-08 C00015          A003
    200128       3500           1500 20
-JUL-08 C00009          A002
    200135       2000            800 16
-SEP-08 C00007          A010
    200131        900            150 26
-AUG-08 C00012          A012
    200133       1200            400 29
-JUN-08 C00009          A002
    200132       4000           2000 15
-AUG-08 C00013          A013
    200100       1000            600 08
-JAN-08 C00015          A003
    200110       3000            500 15
-APR-08 C00019          A010
    200107       4500            900 30
-AUG-08 C00007          A010
    200112       2000            400 30
-MAY-08 C00016          A007
    200113       4000            600 10
-JUN-08 C00022          A002
    200102       2000            300 25
-MAY-08 C00012          A012 

خروجی به صورت زیر خواهد بود :

کد پی‌اچ‌پی:
AGENT_CODE SUM(ADVANCE_AMOUNT)
---------- -------------------
A004                      2100
A002                      3500
A007                       500
A009                       100
A011                       900
A012                       450
A010                      3700
A013                      3200
A001                       200
A008                      3300
A006                       600
A005                      3100
A003                      1000 


یعنی اگر برای مثال شما بخواهیم نام ستون ها را جایگذاری کنیم، باید ((ستون نام کاربران)) به جای agent_code و ((ستون مبلغ ها)) به جای advance_amount قرار بگیرد.

Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط sohrabjam

آرایه دو بعدی پویا (در sqlite) (برنامه نویسی اندروید)

#6
آقا من خیلی ارادت دارم خدمت مدیر زحمت کش انجمن

واقعا احسنت به این همه حوصله و سعه صدر که بدون توقع و چشم داشتی به خلق خدا خدمت می کنید.
مشکل من با روشی که توضیح داده بودید حل شد . با استفاده از کد زیر من تونستم به هدف خودم برسم . امیدوارم برای سایر دوستان نیز مفید باشه.
کد:
public String AllSum(String table,int row,String word,String field) {
       Cursor cu = mydb.rawQuery("SELECT SUM (hesab_value) FROM " + table + " WHERE " + field + " LIKE '%" + word + "%'group by Hesab_Name", null);
       cu.moveToPosition(row);
     
       String s=cu.getString(cu.getColumnIndex("SUM (hesab_value)"));
       return s;
   }
پاسخ
 سپاس شده توسط admin ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان