Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
#1

Как минусоват данные с таблицы 2 от таблицы 1 - Программирование Android

04.02.2014, 11:29. Просмотров 621. Ответов 5
Метки нет (Все метки)

Я пока добился чего хотел. Данный момент у меня есть 2 таблицы в одной БД. Первая приход товаров называется TABLE_GOODS, и вторая таблица расходов TABLE_SELL, у обоих все сохраняется по разным id. Обе выводят под разным listview свои данные. Теперь моя задача минусоват товары и вывести их на новый activity или listview Остаток.
Например я сделал новый приход
в TABLE_GOODS 10 шт книг по 5 рублей (например у него id 10)
в TABLE_SELL пищу что продал 4 книг по 10 рублей (например у него id 11)
как мне соединит их вместе чтобы отминусоват (ну как бы id10- id11 но я сам точно не знаю) и чтобы в результате у меня в listview Остаток показывал
6 книг по 5 рублей (или продано 4 книг по 10 рублей)
я по созданию и сохранению прочитал много и люди помогли
вот теперь это задача очень тяжеловато для меня одного
спасибо большое
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 11:29     Как минусоват данные с таблицы 2 от таблицы 1
Посмотрите здесь:

При считывании данных из таблицы, данные становятся пустыми - Программирование Android
Проблема в том что когда я записываю новый элемент таблицы проблем не возникает и данные вводятся корректно, но когда я пытаюсь их считать,...

Загрузить данные один раз с MySQL таблицы в память приложения, и в дальнейшем использовать ее - Программирование Android
Всем добрый вечер, Есть ли возможность загрузить данные один раз с MYSQL таблицы в память приложения, и в дальнейшем использовать ее....

как создать таблицы - Программирование Android
привет всем! в общем так: есть таблица в SQLite, ее нужно вывести в таблицу на экране телефона. а также при нажатии на кнопку добавлять...

SQLiteDatabase как обновить таблицы? - Программирование Android
Привет, снова я )) Данные в базу закачиваются из других классов, то есть всё работает, но только если по отдельности открывать активити... ...

Как подключаться к БД из разных активностей? Как создать 2 таблицы? - Программирование Android
Добрый вечер! Мучаюсь с таким вопросом. Есть БД, нужно создать 2 таблицы. Одна таблица групп в одной активности, вторая таблица учащихся...

Как реализовать выделение элементов таблицы - Программирование Android
Уважаемые знатоки, нужна ваша помощь :) Имеется таблица, созданная с помощью GridLayout, элементами которой являются ImageView. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 423
04.02.2014, 13:49     Как минусоват данные с таблицы 2 от таблицы 1 #2
Не совсем понятно. В данном случае речь идет об одной и той же позиции номенклатуры?
При чем тут вообще цена?
Если всего 2 типа цены (закупочная и розничная), то проще сделать так:

1-я таблица: номенклатура, в ней кроме описания свойств есть 2 столбца для 2 типов цен
2-я таблица - приход
3-я таблица - раход

Но может понадобиться отдельная таблица для шапки документа и для таб. части документа, т.е. будут 5 таблиц.
Далее суммировать приходы и расходы по этой номенклатуре, после чего отнимать одно от другого. Можно получить одним запросом, а можно несколькими.
Остаток с ценой - это как? Цена не должна зависеть от предыдущего документооборота или должно быть что-то типа партионного учета?
Если не зависит, то связываем полученные данные (LEFT JOIN или INNER JOIN) с таблицей номенклатуры для получения цены определенного типа цен.
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
04.02.2014, 15:40  [ТС]     Как минусоват данные с таблицы 2 от таблицы 1 #3
Здесь я создаю таблицу и добавляю данные
Код
public class DBHandlerImpl extends SQLiteOpenHelper implements  DBHandler<Goods>{
    private static final int DATABASE_VERSION = 4;
    private static final String DATABASE_NAME = "app_bases";

    private static final String TABLE_GOODS = "users";
    private static final String TABLE_SELL = "sell";

    private static final String KEY_ID = "id";
    private static final String KEY_NAME_GOODS = "name_goods";
    private static final String KEY_DATE = "date";
    private static final String KEY_AMOUNT = "amount";
    private static final String KEY_COST = "cost";

    public DBHandlerImpl(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "Create Table " + TABLE_GOODS + "(" + KEY_ID + "INTEGER PRIMARY KEY, " +
                                                            KEY_NAME_GOODS + " TEXT, " +
                                                            KEY_DATE + " TEXT, " +
                                                            KEY_AMOUNT + " TEXT, " +
                                                            KEY_COST + " TEXT);";
        db.execSQL(query);

         query = "Create Table " + TABLE_SELL + "(" + KEY_ID + "INTEGER PRIMARY KEY, " +
                                                            KEY_NAME_GOODS + " TEXT, " +
                                                            KEY_DATE + " TEXT, " +
                                                            KEY_AMOUNT + " TEXT, " +
                                                            KEY_COST + " TEXT);";
        db.execSQL(query);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i2) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_GOODS);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_SELL);
        onCreate(db);
    }

    @Override
    public void addRashod(Goods goods) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_NAME_GOODS, goods.getName_goods());
        values.put(KEY_DATE, goods.getDate());
        values.put(KEY_AMOUNT, goods.getAmount());
        values.put(KEY_COST, goods.getCost());
        db.insert(TABLE_SELL, null, values);
        db.close();
    }

      @Override
    public void addPrihod(Goods goods) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_NAME_GOODS, goods.getName_goods());
        values.put(KEY_DATE, goods.getDate());
        values.put(KEY_AMOUNT, goods.getAmount());
        values.put(KEY_COST, goods.getCost());
        db.insert(TABLE_GOODS, null, values);
        db.close();
    }
здесь сохраняю приход в Приход активити

Код
 public void saveTovar(View v){
        AlertDialog.Builder builder = new AlertDialog.Builder(Prihod.this);
        builder.setTitle("Потдвердить сохранение...");
        builder.setMessage("Вы уверены, что хотите сохранить?");
        builder.setIcon(R.drawable.save);
        builder.setPositiveButton("Да", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                goods = new Goods(1, edtTovar.getText().toString(),
                        editDate.getText().toString(),
                        editAmount.getText().toString(),
                        editCost.getText().toString());
                db.addPrihod(goods);
                Toast.makeText(getApplicationContext(), "Новый товар сохранен!", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setNegativeButton("Нет", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }
здесь сохраняю расход в Расход активити

Код
 public void saveRashod(View v){
        AlertDialog.Builder builder = new AlertDialog.Builder(Rashod.this);
        builder.setTitle("Потдвердить сохранение...");
        builder.setMessage("Вы уверены, что хотите сохранить?");
        builder.setIcon(R.drawable.save);
        builder.setPositiveButton("Да", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                goods = new Goods(1, editRashod.getText().toString(),
                        editDateRashod.getText().toString(),
                        editAmountRashod.getText().toString(),
                        editCostRashod.getText().toString());
                db.addRashod(goods);
                Toast.makeText(getApplicationContext(), "Новый расход сохранен!", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setNegativeButton("Нет", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 423
04.02.2014, 16:18     Как минусоват данные с таблицы 2 от таблицы 1 #4
Надо бы сначала разобраться о структурой БД.

1. Таблица TABLE_GOODS
Поля KEY_AMOUNT и KEY_COST - я так понимаю, остаток и цена?
А почему тогда они текстовые?
И если документы влияют на остаток товара, то зачем тогда остаток в таблице номенклатуры?

2. Таблица TABLE_SELL
Почему поле KEY_NAME_GOODS имеет текстовый тип, если уникальное поле в TABLE_GOODS с типом int?
Поля KEY_AMOUNT и KEY_COST тоже почему-то текстовые.

Ну и во вставке записей в документы должен фигурировать id номенклатуры, а не наименование.
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
04.02.2014, 16:44  [ТС]     Как минусоват данные с таблицы 2 от таблицы 1 #5
я поставил текстовые потому что не как не смог int поставит
пожалуйста обьясните мне что вы хотели сказать здесь я исправлю
Цитата Сообщение от Slon747 Посмотреть сообщение
Ну и во вставке записей в документы должен фигурировать id номенклатуры, а не наименование.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 17:22     Как минусоват данные с таблицы 2 от таблицы 1
Еще ссылки по теме:

Как вытащить значение из таблицы бд sqlite - Программирование Android
Здравствуйте.Помогите пожалуйста разобраться. Суть такая.Есть две таблицы в бд.Нужно вытащить значение из одной таблицы и подставить в...

Как узнать имя таблицы на которую установлен курсор - Программирование Android
Есть БД состоящая из нескольких таблиц. Как узнать на какую конкретно таблицу установлен курсор. Нужен метод обратный ...

Как вывести все записи из таблицы в текстовое поле? - Программирование Android
Делаю так, но выводится только первая запись: public void onClick(View view) { Cursor cursor = mSqLiteDatabase.query(&quot;dics&quot;,...

Записать массив String как столбец таблицы базы данных - Программирование Android
Есть класс Product public class Product{ String name; String price; ArrayList&lt;String&gt; urls; ...

Создание таблицы - Программирование Android
Добрый день. Подскажите пожалуйста как можно вывести на экран небольшую табличку с данными, при том чтобы эту табличку можно было...

Две таблицы в БД - Программирование Android
Здравствуйте! проблема в том, что когда хочу курсором пройтись по таблицам базы(а их две, при нажатии на определенные кнопки должны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 423
04.02.2014, 17:22     Как минусоват данные с таблицы 2 от таблицы 1 #6
Зачем в документах наименование товара? Как потом этим пользоваться?
В документах должна быть ссылка на строку таблицы номенклатуры с типом "INTEGER NOT NULL", т.к. уникальный индекс в таблице номенклатуры целочисленный (id).
Т.е. имея id из таблицы номенклатуры и к примеру GOOD из таблицы документов мы сможем связать между собой эти данные и далее делать что угодно.
Java
1
2
3
4
5
String query = "Create Table " + TABLE_GOODS + 
    "(id INTEGER PRIMARY KEY, name_goods TEXT, cost1 DOUBLE NOT NULL, cost2 DOUBLE NOT NULL);";
 
query = "Create Table " + TABLE_SELL
    + "(id INTEGER PRIMARY KEY, good INTEGER NOT NULL, date TEXT, amount INTEGER NOT NULL);";
Из номенклатуры выкинул date (если нужно - верните), остаток и добавил 2 поля для хранения цены.
Из таблицы документов выкинул поле цена (т.к. я понял, что цена фиксированная из справочника номенклатуры).
Поле good в таблице документов целочисленное. Оно связано с полем id номенклатуры.
После этого, например, получаем все продажи одного из товаров с ценой:
SQL
1
2
3
4
SELECT sell.*, users.cost2
FROM sell
LEFT JOIN users ON sell.good = users.id
WHERE sell.good = 123
P.S. Вообще то вам нужно почитать основы СУБД (совсем не обязательно про SQLite).
Yandex
Объявления
04.02.2014, 17:22     Как минусоват данные с таблицы 2 от таблицы 1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru