Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / SQLite Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 13672
Похоже блокировка из-за отложенного создания временных таблиц.
Попробуй добавить сортировку, чтобы явно запись T2 произошла:
(@" 
Create temp table T1 as 
Select Sheta.Id,Profil.artikul_profil, Profil.system, Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol, 
Izd_karandash.sum,Izd_karandash.id_karandash,Izd.id_plenka_street, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S 
FROM Sheta INNER JOIN Klient ON Sheta.id_K = Klient.Id_klient 
INNER JOIN Izd_Karandash ON Sheta.Id = Izd_karandash.id_schet 
INNER JOIN Izd ON Sheta.id=Izd.id_schet 
INNER JOIN Profil ON Profil.Id_profil = Izd.id_profil 
INNER JOIN Plenka AS Plenka_1 ON Izd.id_plenka_komnata=Plenka_1.Id_plenka 
WHERE (Sheta.id IN ({0})); 

Create temp table T2 as 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from T1 left join Karandash ON Karandash.Id_karandash =T1.id_karandash 
union all 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from Karandash left join T1 ON Karandash.Id_karandash = T1.id_karandash 
where T1.id_karandash is NULL
order by Id_karandash; 

Select T2.*,Plenka.* 
from T2 left join Plenka on Plenka.Id_plenka = T2.id_plenka_street 
union all 
Select T2.*,Plenka.* 
from Plenka left join T2 on Plenka.Id_plenka = T2.id_plenka_street 
where T2.id_plenka_street is NULL;

drop table T1; 
drop table T2; 
", m);


Если не поможет, то надо изучать документацию. Я со временными таблицами тоже не особо работал.
23 окт 18, 16:08    [21712480]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T, нет, все равно ошибка(
24 окт 18, 08:21    [21712999]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 13672
Угадать похоже не получится. Давай структуру таблиц. Запусти
sqlite3.exe my.db

где my.db это твоя БД.

Запустится sqlite3, там выполни:
sqlite> .output schema.sql
sqlite> .schema
sqlite> .exit

Файл schema.sql выложи сюда.
24 окт 18, 08:36    [21713006]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T,

К сообщению приложен файл (schema.sql - 2Kb) cкачать
24 окт 18, 09:21    [21713029]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 13672
Создал пустую БД, повторить проблему не получилось, это работает 21712480.

По ошибке "A table in the database is locked" нашел похожий случай

Попробуй убрать из запроса
drop table T1; 
drop table T2;
и сделать drop после того как прочитаешь результат запроса.
24 окт 18, 14:33    [21713609]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T,
попробовал в sqlite DB Browser, все работает, а в Visual Studio нет
24 окт 18, 14:52    [21713659]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 13672
АртурVan_Kenobi
Dima T,
попробовал в sqlite DB Browser, все работает, а в Visual Studio нет

drop`ы убрал? без них не работает?

В Visual Studio как запускаешь запрос?
24 окт 18, 20:13    [21714230]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T, Без drop выходит ошибка (System.Data.ConstraintException: "Не удалось включить ограничения. По меньшей мере одна строка содержит значение, нарушающее ограничения по отсутствию пустых значений, уникальности или внешним ключам.")
///
В sqlite browser попробовал, результат не тот выходит. у меня есть Счет в счет входят Изделия и Аксессуары, мне надо что бы на печать выходило содержимое счета в не зависимости есть ли там Акессуары или Изделия или нет, а получается если в счете нет аксессуаров или изделий нет, то в отчет ничего не выходит, а выходит только тогда когда в счете есть и изделия и акссесуары
///
в VS в Dataset пишу так:
        public virtual int Fill(DataSet1.DataTable1DataTable dataTable, object m)
        {
            this._commandCollection = new global::Devart.Data.SQLite.SQLiteCommand[1];
            this._commandCollection[0] = new global::Devart.Data.SQLite.SQLiteCommand();
            this._commandCollection[0].Connection = this.Connection;
            this._commandCollection[0].CommandText = string.Format(@"
Create temp table T1 as
    Select Sheta.Id,Profil.artikul_profil, Profil.system, Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol, 
        Izd_karandash.sum,Izd_karandash.id_karandash,Izd.id_plenka_street, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S
    FROM Sheta INNER JOIN Klient ON Sheta.id_K = Klient.Id_klient
               INNER JOIN Izd_Karandash ON Sheta.Id = Izd_karandash.id_schet
               INNER JOIN Izd ON Sheta.id=Izd.id_schet
               INNER JOIN Profil ON Profil.Id_profil = Izd.id_profil
               INNER JOIN Plenka AS Plenka_1 ON Izd.id_plenka_komnata=Plenka_1.Id_plenka
WHERE        (Sheta.id IN ({0}));

Create temp table T2 as
    Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash
        from T1 left join Karandash ON Karandash.Id_karandash =T1.id_karandash
union all
    Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash
        from Karandash left join T1 ON Karandash.Id_karandash = T1.id_karandash
where T1.id_karandash is NULL
order by Id_karandash; 

    Select T2.*,Plenka.* 
        from T2 left join Plenka on Plenka.Id_plenka = T2.id_plenka_street 
union all 
    Select T2.*,Plenka.* 
        from Plenka left join T2 on Plenka.Id_plenka = T2.id_plenka_street 
where T2.id_plenka_street is NULL;


", m);

            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
            this.Adapter.SelectCommand = this.CommandCollection[0];

            if ((this.ClearBeforeFill == true))
            {
                dataTable.Clear();
            }
            int returnValue = this.Adapter.Fill(dataTable);
            return returnValue;
        }
25 окт 18, 07:55    [21714451]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / SQLite Ответить