Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#1471: 2017-01-05 11:17:29 ЛС | профиль | цитата
Теперь кое-что прояснилось.
1. Программа "разовая"...
2.
Poputchik писал(а):
Вот только не пойму почему в одном DSC_Query не добавляются столбцы в несколько таблиц:
ALTER TABLE "имя 1 таблицы" ADD column "имя колонки" char;
ALTER TABLE "имя 2 таблицы" ADD column "имя колонки" char;
И кто тебе не даёт в этой "разовой" программе использовать компоненты из вкладки SQLite, в которых возможно выполнение сценария ?
3.
Poputchik писал(а):
К базам у меня доступа нет и я стараюсь не ошибиться чтоб их не испортить своей программой.
А ты не работай с базой - работай с копией.
4. Увидеть бы результат запроса SELECT * FROM sqlite_master WHERE type='table';
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#1472: 2017-01-05 14:27:08 ЛС | профиль | цитата
Tad писал(а):
Vacuum также устраняет фрагментацию таблиц, что вполне может произойти при добавлении колонок.

Возможно. Но тк VACUUM работает в отдельной транзакции, то требует отдельного компонента DSC_Exec
карма: 22

1
Голосовали:Poputchik
Ответов: 16884
Рейтинг: 1239
#1473: 2017-01-06 17:08:49 ЛС | профиль | цитата
Определить наличие колонки можно ещё и так:
SELECT instr('имя добавляемой колонки',sql) FROM sqlite_master WHERE name='<имя таблицы>' and type='table';
0 - если нет.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:Poputchik
Ответов: 413
Рейтинг: 57
#1474: 2017-01-06 18:19:14 ЛС | профиль | цитата
Tad, Я пока оставил так:
Add(MainForm,2953706,14,266)
{
Width=1272
Height=550
Point(onClose)
link(onCreate,8134644:doStrCat,[])
link(onClose,3682550:doEvent,[(61,293)(61,342)])
}
Add(DS_SQLite,9154515,315,273)
{
Name="db1"
Point(onError)
link(onOpen,12839521:doString,[])
link(FileName,8134644:Result,[(321,264)(258,264)(258,320)(76,320)])
link(onError,16148190:doWork,[(359,286)(359,321)])
}
Add(Dir,1723842,70,231)
{
}
Add(StrCat,8134644,70,280)
{
Str2="Customer.db"
link(onStrCat,11789700:doFileExists,[])
link(Str1,1723842:CurrentDir,[])
}
Add(LineBreakEx,16148190,371,315)
{
Caption="Error"
}
Add(VisualStrings,9988527,119,147)
{
@Hint=#17:Имя базы клеентов|
Lines=#11:Customer.db|
Width=74
AddHint(-5,-25,116,13,@Hint)
}
Add(FileTools,11789700,119,259)
{
link(onEnd,15633069:doEvent1,[])
link(FileName,9988527:Text,[])
link(NewFileName,13920293:Text,[])
}
Add(IndexToChanel,15343565,203,266)
{
Point(Index)
link(onEvent2,13032493:doEvent1,[])
link(Index,5687095:Var2,[])
}
Add(Memory,7991647,203,203)
{
}
Add(Hub,15633069,168,259)
{
link(onEvent1,7991647:doValue,[(192,265)(192,209)])
link(onEvent2,15343565:doEvent,[])
}
Add(IndexToChanel,3682550,238,336)
{
Point(Index)
link(onEvent2,9154515:doClose,[(298,349)(298,286)])
link(Index,5687095:Var3,[(244,250)])
}
Add(GetDataEx,5687095,203,245)
{
link(Data,7991647:Value,[])
}
Add(LineBreakEx,7090998,420,147)
{
Caption="Error"
Type=1
link(OnEvent,13069546:doMessage,[])
}
Add(Message,13069546,476,147)
{
Caption="Error"
}
Add(DSC_Query,10510355,469,273)
{
DSManager="db1"
link(onQuery,12302515:doStr,[])
link(onError,5223325:doWork,[(509,293)(509,321)])
}
Add(FormatStr,12839521,371,273)
{
DataCount=1
Mask="pragma table_info(%1);"
Point(FString)
link(onFString,418486:doCharset,[])
link(Str1,7371429:Text,[])
}
Add(LineBreakEx,5223325,525,315)
{
Caption="Error"
}
Add(Charset,418486,420,273)
{
Type=6
link(onCharset,10510355:doQuery,[])
}
Add(MT_String,12302515,525,273)
{
Delimeter="\9"
link(onResult,6648628:doCharset,[])
}
Add(Charset,6648628,574,273)
{
Type=7
link(onCharset,13468017:doEvent1,[])
}
Add(VisualStrings,9449102,490,595)
{
@Hint=#11:Имя таблицы|
Lines=#17:Juridical_persons|
Width=88
}
Add(VisualStrings,16740710,490,497)
{
@Hint=#11:Имя таблицы|
Lines=#22:individual_businessman|
Width=116
}
Add(VisualStrings,7371429,371,231)
{
@Hint=#11:Имя таблицы|
Lines=#16:physical_persons|
Width=88
}
Add(Memo,12449006,812,238)
{
Top=25
Width=405
Height=239
ScrollBars=2
}
Add(Hub,13032493,266,273)
{
link(onEvent1,9154515:doOpen,[])
link(onEvent2,12808121:doEvent,[(291,286)(291,342)])
}
Add(VisualStrings,13920293,126,175)
{
@Hint=#17:Имя базы клеентов|
Lines=#15:Customer.db.tmp|
Width=95
}
Add(Check,371069,805,336)
{
link(onEvent,14400780:doEvent1,[])
}
Add(MultiStrData,15261095,658,280)
{
Char="\9"
link(onPart2,7562039:doCompare,[])
}
Add(If_else,7562039,707,287)
{
Op2=String(nom_dog)
link(onTrue,4841836:doOn,[])
}
Add(Switch,4841836,756,273)
{
DataOn=Integer(1)
DataOff=Integer(0)
Point(doOn)
Point(State)
}
Add(IndexToChanel,12808121,756,336)
{
Point(Index)
link(onEvent1,371069:doWork,[])
link(Index,4841836:State,[])
}
Add(Hub,14400780,875,336)
{
OutCount=6
link(onEvent1,11789700:doCopy,[(894,342)(894,104)(109,104)(109,272)])
link(onEvent2,11487427:doQuery,[])
link(onEvent3,13242632:doQuery,[(942,356)(942,391)])
link(onEvent4,2982143:doQuery,[(935,363)(935,433)])
link(onEvent5,719392:doExec,[(928,370)(928,475)])
link(onEvent6,16443863:doEvent1,[(900,377)(900,398)(383,398)(383,454)])
}
Add(DSC_Query,11487427,952,343)
{
SQL="ALTER TABLE physical_persons ADD column nom_dog char;"
DSManager="db1"
link(onError,12290538:doWork,[])
}
Add(LineBreakEx,12290538,1001,357)
{
Caption="Error"
}
Add(Memo,9552018,756,448)
{
Top=269
Width=405
Height=235
ScrollBars=2
}
Add(DSC_Query,14997235,574,448)
{
DSManager="db1"
link(onQuery,9803752:doWork2,[])
link(onColumns,9803752:doWork3,[(620,461)])
link(onError,13516536:doWork,[(614,468)(614,496)])
}
Add(FormatStr,12179563,476,448)
{
DataCount=1
Mask="pragma table_info(%1);"
Point(FString)
link(onFString,8645564:doCharset,[])
link(Str1,5054364:Text,[])
}
Add(LineBreakEx,13516536,637,490)
{
Caption="Error"
}
Add(Charset,8645564,525,448)
{
Type=6
link(onCharset,14997235:doQuery,[])
}
Add(MT_String,7387046,637,448)
{
Delimeter="\9"
link(onResult,13423965:doCharset,[])
}
Add(VisualStrings,5054364,476,406)
{
@Hint=#11:Имя таблицы|
Lines=#16:physical_persons|
Width=88
}
Add(Charset,13423965,693,448)
{
Type=7
link(onCharset,9552018:doAdd,[])
}
Add(HubEx,9803752,616,448)
{
link(onEvent,7387046:doStr,[])
}
Add(Hub,13468017,623,273)
{
link(onEvent1,12449006:doAdd,[(648,279)(648,244)])
link(onEvent2,15261095:doSplit,[])
}
Add(DSC_Query,13242632,952,385)
{
SQL="ALTER TABLE individual_businessman ADD column nom_dog TEXT;"
DSManager="db1"
link(onError,144238:doWork,[])
}
Add(LineBreakEx,144238,1001,399)
{
Caption="Error"
}
Add(DSC_Query,2982143,952,427)
{
SQL="ALTER TABLE Juridical_persons ADD column nom_dog TEXT;"
DSManager="db1"
link(onError,5471415:doWork,[])
}
Add(LineBreakEx,5471415,1001,441)
{
Caption="Error"
}
Add(LineBreakEx,12893770,1001,476)
{
Caption="Error"
}
Add(Memo,10035609,773,638)
{
Left=420
Top=34
Width=405
Height=470
ScrollBars=2
}
Add(Memo,10546872,766,539)
{
Left=840
Top=34
Width=405
Height=470
ScrollBars=2
}
Add(DSC_Query,15691860,588,539)
{
DSManager="db1"
link(onQuery,89880:doWork2,[])
link(onColumns,89880:doWork3,[(634,552)])
link(onError,8455648:doWork,[(628,559)(628,587)])
}
Add(FormatStr,15862723,490,539)
{
DataCount=1
Mask="pragma table_info(%1);"
Point(FString)
link(onFString,11758901:doCharset,[])
link(Str1,16740710:Text,[])
}
Add(LineBreakEx,8455648,651,581)
{
Caption="Error"
}
Add(Charset,11758901,539,539)
{
Type=6
link(onCharset,15691860:doQuery,[])
}
Add(MT_String,4856244,651,539)
{
Delimeter="\9"
link(onResult,6950737:doCharset,[])
}
Add(Charset,6950737,707,539)
{
Type=7
link(onCharset,10546872:doAdd,[])
}
Add(HubEx,89880,630,539)
{
link(onEvent,4856244:doStr,[])
}
Add(DSC_Query,5525628,588,637)
{
DSManager="db1"
link(onQuery,15721547:doWork2,[])
link(onColumns,15721547:doWork3,[(634,650)])
link(onError,5555360:doWork,[(628,657)(628,685)])
}
Add(FormatStr,11994119,490,637)
{
DataCount=1
Mask="pragma table_info(%1);"
Point(FString)
link(onFString,6836753:doCharset,[])
link(Str1,9449102:Text,[])
}
Add(LineBreakEx,5555360,651,679)
{
Caption="Error"
}
Add(Charset,6836753,539,637)
{
Type=6
link(onCharset,5525628:doQuery,[])
}
Add(MT_String,13097353,651,637)
{
Delimeter="\9"
link(onResult,15557689:doCharset,[])
}
Add(Charset,15557689,707,637)
{
Type=7
link(onCharset,10035609:doAdd,[])
}
Add(HubEx,15721547,630,637)
{
link(onEvent,13097353:doStr,[])
}
Add(Hub,16443863,420,448)
{
OutCount=3
link(onEvent1,12179563:doString,[])
link(onEvent2,15862723:doString,[(466,461)(466,545)])
link(onEvent3,11994119:doString,[(459,468)(459,643)])
}
Add(Label,7958425,497,7)
{
Left=845
Top=5
Width=150
Caption="individual_businessman"
}
Add(Label,2174582,562,14)
{
Left=435
Top=5
Width=115
Height=17
Caption="Juridical_persons"
}
Add(Label,8774446,632,28)
{
Left=10
Top=5
Width=115
Height=17
Caption="physical_persons"
}
Add(DSC_Exec,719392,952,469)
{
SQL="VACUUM;"
DSManager="db1"
link(onError,12893770:doWork,[])
}
Попробовал на опытной базе, вроде бы все нормально.
Но за предложенный вариант всё рвкно спасибо. Всё пригодится

Редактировалось 1 раз(а), последний 2017-01-06 18:20:27
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#1475: 2017-01-06 19:12:41 ЛС | профиль | цитата
Tad писал(а):
Определить наличие колонки можно ещё и так:
SELECT instr('имя добавляемой колонки',sql) FROM sqlite_master WHERE name='<имя таблицы>' and type='table';

А если будет колонка group_time и надо проверить наличие колонки group? Будет выводить всегда не 0, даже если колонки нет?
карма: 10
0
Ответов: 16884
Рейтинг: 1239
#1476: 2017-01-06 19:56:23 ЛС | профиль | цитата
Assasin писал(а):
А если будет колонка group_time и надо проверить наличие колонки group? Будет выводить всегда не 0, даже если колонки нет?
А это на усмотрение автора программы. Он то уж знает - можно применить такой запрос или нет.
Насколько я понял, ему нужно проверить наличие колонки "nom_dog".
Мой алгоритм:
1. Скопировать файл БД. И дальше работать с копией.
2. Проверить наличие колонки "nom_dog".
3. Если нет, то создать временную таблицу:
CREATE TABLE IF NOT EXISTS new(kol1,nom_dog,kol2,kol3,....);
4. Запросом INSERT INTO new SELECT kol1,NULL,kol2,kol3,..... FROM physical_persons; заполнить таблицу new
5. Проверить new на перенос (хотя-бы по равенству count()) или более сложной.
6. Удалить таблицу physical_persons
7. Переименовать new в physical_persons

Poputchik, а зачем
эта конвертация ?

Редактировалось 3 раз(а), последний 2017-01-06 20:22:09
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#1477: 2017-01-15 18:52:31 ЛС | профиль | цитата
Прошу подсказать с запросом!
Есть таблица test:
В коробках разных размеров (box_type), лежат винты разных типов (screw_type).
В коробках одинакового типа всегда лежит одинаковое кол-во винтов.

id box_type screw_type count
1 2 11 100
1 2 12 100
1 3 5 150

Требуется получить данные в виде:

2:11,12:100&3:5:150 (в коробках размера 2 лежат есть винтики 11,12 типа в кол-ве 100шт)&(следующий тип коробок).

Делаю запрос так

select box_type||':'||(group_concat (screw_type,','))||':'||count from test where id=1 group by box_type.
получаю
2:11,12:100
3:5:150

а мне нужно через '&' 2:11,12:100&3:5:150

Не получается составить запрос вида select group_concat((select box_type||':'||(group_concat (screw_type,','))||':'||count from test where id=1 group by box_type),'&')
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1478: 2017-01-16 11:12:02 ЛС | профиль | цитата
Gunnman писал(а):
а мне нужно через '&' 2:11,12:100&3:5:150

CREATE TEMP TABLE IF NOT EXISTS vrem(id INTEGER, txt TEXT);
INSERT INTO vrem SELECT id, box_type||':'||(group_concat (screw_type,','))||':'||count FROM test WHERE id=1 GROUP BY box_type;
SELECT group_concat(txt,' & ') FROM vrem WHERE id=1;
DELETE FROM vrem WHERE 1;


Редактировалось 1 раз(а), последний 2017-01-17 09:55:31
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:Gunnman
Ответов: 16884
Рейтинг: 1239
#1479: 2017-04-29 16:33:09 ЛС | профиль | цитата
Рекомендую всем online проектировщик Баз Данных.
http://dbdsgnr.appspot.com/
Не пожалеете.

Редактировалось 1 раз(а), последний 2017-04-29 16:34:26
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
2
Голосовали:miver, Nickname
Ответов: 9
Рейтинг: 0
#1480: 2017-06-19 22:00:06 ЛС | профиль | цитата
Коллеги. Нужна помощь. База данных SQlite выдала ошибку: "malformed database schema название таблицы already exists
". Как восстановить данные или выполнить проверку?
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1481: 2017-06-19 23:28:04 ЛС | профиль | цитата
Может быть так:
Malformed database schema. <название таблицы> already exists.
Там точка есть ?
Неправильный формат схемы базы данных. <название таблицы> уже существует.

Редактировалось 2 раз(а), последний 2017-06-19 23:32:49
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9
Рейтинг: 0
#1482: 2017-06-19 23:53:22 ЛС | профиль | цитата
нет. точки нет. malformed database schema - table RCFA1944 already exists. Как её удалить? drop и DELETE не помогают.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1483: 2017-06-20 08:16:47 ЛС | профиль | цитата
web-beer писал(а):
нет. точки нет.
Ага, тире есть.
Попробуй SQLite Expert Personal

Редактировалось 2 раз(а), последний 2017-06-20 08:25:39
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1821
Рейтинг: 168
#1484: 2017-10-23 21:02:44 ЛС | профиль | цитата
Всем привет. Имеется таблица с двумя столбцами: usedEnergy типа int (либо real, это не особо принципиально) и date типа date.
Помогите, пожалуйста, составить sql-запрос: нужно вывести название месяца, в который было использовано самое большое количество электроэнергии. То есть, надо найти такой месяц, в котором сумма usedEnergy больше всего

--- Добавлено в 2017-10-23 21:16:26

Пока что сделал так, не знаю, выбрал ли лучший способ

SELECT TOP 1 datename(month, date)
FROM Bills
GROUP BY datename(month, date)
ORDER BY SUM(usedEnergy) DESC

Редактировалось 2 раз(а), последний 2017-10-23 21:16:26
карма: 5

0
Ответов: 16884
Рейтинг: 1239
#1485: 2017-10-23 22:00:40 ЛС | профиль | цитата
А datename(month, date) каким боком к sqlite - с чем его едят?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)