Вверх ↑
Этот топик читают: Гость
Ответов: 413
Рейтинг: 57
#1291: 2014-10-31 21:52:12 ЛС | профиль | цитата
Спасибо. Попробую.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1292: 2014-10-31 21:52:26 ЛС | профиль | цитата
Poputchik писал(а):
возможны случаи когда документ под номером был, но его не внесли в базу и чтоб следующий документ имел правильную нумерацию ему в ручную можно изменить ее
откуда работающий с программой будет знать, что его не внесли ?
Сложности работы с БД возникают из-за неправильного проектирования БД.
Ну не должен ты в качестве номера документа использовать id.
У тебя никогда небыло документов с номерами : 123, 123А, 123б, 123-повторный, 123-добавочный и т.д. ?
БД тем и хороша, что в ней любая анархия - не помеха правильной выборке любых данных.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 413
Рейтинг: 57
#1293: 2014-10-31 21:57:59 ЛС | профиль | цитата
Tad писал(а):
У тебя никогда небыло документов с номерами : 123, 123А, 123б, 123(повторный) и т.д.

в номере документа закодирован год, тип изделия, номер по порядку. Я формирую автоматом номер соединяя данные введенные пользователем и порядковый номер строки. Т.е. номера могут отличатся одной цифрой и эта цифра номер id. Структура номера документа определена стандартом. Моя задача сделать эту нумерацию автоматически с возможностью ручной правки при необходимости и по возможности правильно использовав возможности SqLite.
Tad писал(а):
откуда работающий с программой будет знать, что его не внесли ?

по началу он будет набирать эту базу из уже существующих документов, если очередного документа не окажется, а следующий будет начинаться с другова номера, то ему нужно будет его изменить вручную. Есть еще вероятность появления дополнений к документу. Тогда номер документа будет тот же но в конце изменится буква или добавится слово. Но самое вероятное, что пользователь будет изменять в номере документа именно порядковый номер, т.е. в моем случае id.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1294: 2014-10-31 22:47:17 ЛС | профиль | цитата
Poputchik писал(а):
Тогда номер документа будет тот же но в конце изменится буква или добавится слово
и в какой ROW этот документ будет записываться ?
Ладно. Хозяин - барин.
Ещё раз советую - не привязывай номер документа к ID !

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 413
Рейтинг: 57
#1295: 2014-10-31 23:21:07 ЛС | профиль | цитата
Tad если я создам колонку под другим именем и добавлю ей автоприращение это будет тоже самое что и id сейчас или нет. Если id не использовать то как лучше тогда задать номер который будет иметь в себе цифру на единицу больше цифры указанной в предыдущей строке? Считывать ячейку с номером документа и вычленять изменяющуюся часть, затем прибавлять 1 и использовать в следующем номере?
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1296: 2014-11-01 14:15:00 ЛС | профиль | цитата
1. Я просил что-то типа

id  INTEGER PRIMARY KEY, -- 1. id
-- данные решения
nom_res TEXT, -- 2. номер решения
dat_utv TEXT, -- 3. дата утверждения
-- данные по изделию
tip_izd TEXT, -- 4. тип изделия
nom_izd TEXT, -- 5. номер изделия
nar_izd TEXT, -- 6. ??????????
-- ??????????
nom_ra TEXT, -- 7. ??????????
pri_ra TEXT, -- 8. ??????????
-- ??????????
nom_vch TEXT, -- 9. ??????????
baz_vch TEXT, -- 10. ??????????
-- данные акта
nd_akt TEXT, -- 11. ??????????
pri_akt TEXT, -- 12. ??????????
xor_akt TEXT, -- 13. ??????????
tabl -- 14. ??????????
Понимаю. Военная тайна... Если не военная тайна, то замени знаки вопроса на читаемые слова и верни обратно.
2.
Poputchik писал(а):
как лучше тогда задать номер который будет иметь в себе цифру на единицу больше цифры указанной в предыдущей строке?
a) SELECT max(номер)+1 FROM tabl; -- "номер" - название колонки с номером
б) SELECT max(id)+1 FROM tabl; -- то же с использованием id, что выглядит вообще дурью при id INTEGER PRIMARY KEY AUTOINCREMENT,
а разрешив пользователю его менять - через какое-то время заимеешь такой геморрой , что "мама не горюй."
в) SELECT last_insert_rowid()+1; -- функция SQLite
г) нижняя точка в компоненте SQLite_Query+Math
------------ Дoбавленo в 15.15:
Poputchik писал(а):
есть загвоздочки, например если человек вводит номер который в себе содержит ранее введенный номер (например 1234 содержит в себе 123) то считывание из базы и заполнение полей произойдет в момент ввода 123,

А организовать задержку проблема ?

Add(MainForm,2953706,105,56)
{
Width=320
Height=117
}
Add(Edit,13392797,231,56)
{
Left=160
Top=25
Text=""
link(onChange,9842776:doEvent1,[])
}
Add(Timer,431045,315,70)
{
Interval=100
Enable=1
link(onTimer,14920656:doNext,[])
}
Add(CounterEx,14920656,378,70)
{
Max=10
Point(onThroughMax)
Point(doReset)
link(onThroughMax,15008756:doEvent1,[])
}
Add(Hub,9842776,280,56)
{
OutCount=3
link(onEvent1,14920656:doReset,[(359,62)(359,83)])
link(onEvent2,15946917:doWork1,[(305,69)])
link(onEvent3,431045:doTimer,[])
}
Add(HubEx,15946917,301,77)
{
link(onEvent,431045:doStop,[])
}
Add(Hub,15008756,434,77)
{
link(onEvent1,15946917:doWork3,[(462,83)(462,116)(305,116)])
link(onEvent2,144253:doString,[])
}
Add(FormatStr,144253,476,84)
{
Mask="SELECT * FROM table WHERE xxx=%1;"
link(onFString,8764172:doOn,[])
link(Str1,13392797:Text,[(482,46)(213,46)(213,100)(237,100)])
}
Add(Label,10966471,161,56)
{
Left=50
Top=25
Width=95
Height=17
Caption="Номер документа"
}
Add(LED,8764172,546,70)
{
Left=255
Top=20
}
И пример (насколько я понял задачу) poputchik_1.rar
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1poputchik_1.rar [3.5KB] [337]
Ответов: 413
Рейтинг: 57
#1297: 2014-11-01 20:12:50 ЛС | профиль | цитата
Добрый вечер.
Tad писал(а):
tabl          -- 14. ??????????

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

Если не трудно подскажите разницу между:
INSERT OR REPLACE INTO reshenie VALUES (%1, . ..)
и
INSERT INTO reshenie (nom_res, . . .) VALUES ('%1', . . .)
в первом варианте запись вставляется или перезаписывается что ли?
Tad писал(а):
И пример (насколько я понял задачу)

Я приблизительно так и построил програмку, основные вопросы у меня по правильности построения структуры базы SqLite и правильности построения запросов (я в них просто нулевой).
За приведенные примеры большое спасибо.
Можно ли выводить одновременно данные по отдельным колонкам из разных таблиц одной базы. Т.е. задавать запрос одновременно к нескольким таблицам(например в одной таблице хранить все записи по одним документам, а в другой по другому и дабы отдельные записи не дублировались при необходимости запрашивать их)
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1298: 2014-11-01 20:30:47 ЛС | профиль | цитата
Poputchik писал(а):
таблица с тремя строками в одной из которых записан многострочный текст, в другой даты которые нужно контролировать . ..
а в третьей ?
INSERT INTO reshenie (nom_res, . . .) VALUES ('%1', . . .) Перечислять имена колонок нужно если заносятся данные только в несколько колонок. Если во все - то не надо.
INSERT OR REPLACE INTO reshenie VALUES (12, . ..); -- Если четко указано значение id, то при наличии такой записи он будет изменена на новые значения values, при отсутствии - будет добавлена.
INSERT OR REPLACE INTO reshenie VALUES (NULL, . ..); -- Если на месте id указать NULL , то запись будет просто добавлена.
В схеме приведённой выше за это отвечает компонент Memory
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:Poputchik
Ответов: 413
Рейтинг: 57
#1299: 2014-11-01 20:40:39 ЛС | профиль | цитата
Tad писал(а):
а в третьей ?

а в третей . . . В моем случае это ответственное лицо.
Tad писал(а):
В схеме приведённой выше за это отвечает компонент Memory

Я усложнил себе схему, сделав отдельные схемы на добавление и замену. Приведенный пример гораздо проще. Спасибо.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1300: 2014-11-01 21:15:15 ЛС | профиль | цитата
Значит должны быть ещё :
Список ответственных лиц

CREATE TABLE IF NOT EXISTS otvl(id INTEGER PRIMARY KEY,
f TEXT, --фамилия
i TEXT, --имя
o TEXT, --Отчество
tel TEXT -- телефон
);
и список дат и отв.лиц

CREATE TABLE IF NOT EXISTS otvl(
id_resh INTEGER, -- id записи таблицы reshenie
data INTEGER, -- дата контроля
id_otv INTEGER -- id ответственного лица
);
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 413
Рейтинг: 57
#1301: 2014-11-01 21:38:10 ЛС | профиль | цитата
Tad,
Спасибо!
карма: 0

0
Ответов: 1535
Рейтинг: 176
#1302: 2014-11-06 09:45:18 ЛС | профиль | цитата
Tad, помогай!
Если в базе имеется колонка с простым списком имён файлов с расширением, то как мне представить этот список в таблице пользователю без расширения? Какой должен быть запрос?
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 655
Рейтинг: 18
#1303: 2014-11-06 12:52:34 ЛС | профиль | цитата
ser_davkin,

create table test (file text);
insert into test values ('song.mp3');
insert into test values ('verybigexecutable.exe');
insert into test values ('simple.html');

select rtrim(rtrim(file,"htmlexemp3"),'.') from test;

п.с. "htmlexemp3" -дописывай туда нужные тебе форматы htmlexemp3docxls и т.д., только точку не ставь.
------------ Дoбавленo в 13.52:
первым rtrim'ом (внутри запроса который) мы удаляем ненужные хвосты "htmlexemp3", вторым rtrim'ом убиваем '.'

в "htmlexemp3" перечисли символы которые нужно вырезать только точку не ставь., у меня отлично пашет вот такой вариант

select rtrim(rtrim(file,'qwertyuiopasdfghjklzxcvbnm1234567890'),'.') from test;

п.с. мой вариант не панацея но рабочий..
карма: 0

0
Ответов: 1535
Рейтинг: 176
#1304: 2014-11-06 13:44:57 ЛС | профиль | цитата
Gunnman, что не так?
Add(MainForm,2953706,56,105)
{
Width=321
Height=293
link(onCreate,6400602:doOpen,[])
}
Add(DS_SQLite,6400602,105,119)
{
Name="db"
FileName="hhh.db"
link(onOpen,6862751:doEvent1,[])
}
Add(DSC_Exec,5053667,217,119)
{
SQL="create table test (file text);\r\ninsert into test values ('song.mp3');\r\ninsert into test values ('verybigexecutable.exe');\r\ninsert into test values ('simple.html');"
DSManager="db"
}
Add(DSC_Query,4593301,217,224)
{
SQL="select rtrim(rtrim(file,"htmlexemp3"),'.') from test;"
DSManager="db"
link(onQuery,16761449:doAdd,[])
link(onError,10876226:doMessage,[])
}
Add(Memo,9943073,308,168)
{
Left=5
Top=5
Width=140
Height=245
}
Add(Message,10876226,259,238)
{
}
Add(Hub,6862751,154,119)
{
OutCount=3
link(onEvent1,5053667:doExec,[])
link(onEvent2,8668742:doQuery,[(192,132)(192,174)])
link(onEvent3,4593301:doQuery,[(184,139)(184,230)])
}
Add(DSC_Query,8668742,217,168)
{
SQL="select file from test;"
DSManager="db"
link(onQuery,9943073:doAdd,[])
}
Add(Memo,16761449,308,224)
{
Left=155
Top=5
Width=140
Height=245
}
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 655
Рейтинг: 18
#1305: 2014-11-06 14:54:31 ЛС | профиль | цитата


ser_davkin, либы старые у Hiasm,я давно их поменял на более свежие)

http://forum.hiasm.com/forum_serv.php?q=56&id=3827 -вот либы которые пользую (они кстати с поддержкой шифрования базы, я использую, оч крутая вещь)

в папку с Hiasm кинь их, ну и не забудь рядом с приложением держать их.

п.п.с вобще используй select rtrim(rtrim(file,'qwertyuiopasdfghjklzxcvbnm1234567890'),'.') from test;

'qwertyuiopasdfghjklzxcvbnm1234567890' - удобнее чем перечислять htmlexedoc и т.д.
карма: 0

1
Голосовали:ser_davkin
Сообщение
...
Прикрепленные файлы
(файлы не залиты)