|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogЕсли выгрузка будет делаться по кнопке(пользователем) то этого никто делать не будет ТОЧКА. Ну так это уже будет проблема бюстгалтерш. Хотя... Они в 110% случаях тупые и упертые: - Делать так и не иначе! А значить будут. :-) Во всяком случае это проблемы главбушки - гонять своих, а не отдела ИТ... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 20:28 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogigs123dgdog, а еще лучше и экспорт дописать (как советовали ранее) с 1С-ки той же сделать обработкой выгрузку в текстовый файл, желательно единого формата с другими файлами... В 1С я полный NULL даже не ноль. 1Сник запрос дал. COMсоединением подрубаюсь, получаю данные. Если выгрузка будет делаться по кнопке(пользователем) то этого никто делать не будет ТОЧКА. Если выгружать опять же подрубаясь COMом и командуя 1С то смысла не вижу, напрямую получать данные или в из файла их брать. Если не прав или недопонял пните в нужную степь. Если формат исходных данных будет единым у тебя как минимум в 2 раза код уменьшится и это главное. Ну и External Table есть такое в Firebird http://www.ibase.ru/impexp/ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 20:35 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LInedgdogЕсли выгрузка будет делаться по кнопке(пользователем) то этого никто делать не будет ТОЧКА. Ну так это уже будет проблема бюстгалтерш. Хотя... Они в 110% случаях тупые и упертые: - Делать так и не иначе! А значить будут. :-) Во всяком случае это проблемы главбушки - гонять своих, а не отдела ИТ... Завтра провентилирую этот вопрос с начальством, но не распинать нам филиалы, посредников и т.п. многого объяснить не могу. Фигня в том, что база работает. Хреново но работает. И это по большому счету всех устраивает, "только скорость импорта нннадА". Зря и не дальновидно прогнулся под самостоятельный импорт в "одно рыло". (не ожидал такого объема) Теперь переломить ситуацию сложно. Если колом программка встанет "Кто виноват?" хммм... Перевесить импорт на бухов "а зачем, работает же... ну медленно, но работает" И да очередной вопрос. Яндекс чето пять минут ответить не может а вы тут шустрые да и в полной теме: в строковую queryprih.ParamByName('pp') передаю просто переменную pp или quotedstr(pp)? (везде на поверхности примеры с Integer) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 20:39 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
igs123Ну и External Table есть такое в Firebird http://www.ibase.ru/impexp/ Башка не варит, но если я правильно понял то это самый удобный вариант перекинуть данные. Но мне нужна промежуточная проверка запись идет в базу или нет. Эта логика реализована на клиенте (встроенными процедурами мне такое не осилить). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 20:45 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
авторв строковую queryprih.ParamByName('pp') передаю просто переменную pp или quotedstr(pp)? Если ты хочешь, чтобы у тебя в базу записалось значение с кавычками (так лучше не делать) - передавай quotedstr. Если нет - просто переменную. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 20:47 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogigs123Ну и External Table есть такое в Firebird http://www.ibase.ru/impexp/ Башка не варит, но если я правильно понял то это самый удобный вариант перекинуть данные. Но мне нужна промежуточная проверка запись идет в базу или нет. Эта логика реализована на клиенте (встроенными процедурами мне такое не осилить). Тогда забей на ExtTbl Но вариант с единым форматом, на мой взгляд, самый оптимальный.. Т.е. читаешь все источники данных - записываешь в один суммарный файл А потом уже пробегаешь по нему, делаешь свои проверки и пишешь что надо в базу... И (если ничего не путаю) - желательно в одной длинной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 20:59 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdog в строковую queryprih.ParamByName('pp') передаю просто переменную pp или quotedstr(pp)? Варианта ашь три: 1. queryprih.ParamByName('pp').AsString='пи-пи'; 2. queryprih.ParamByName('pp').AsString=pp; 3. queryprih.ParamByName('pp').AsString=Квери2.ФиелдБуНаме('Бла-бла').AsString; Привыкай к явному приведению типов в запросе и в полях в БД. Почему так - хоть убей не помню. :-) Вариант: queryprih.ParamByName('pp').AsString= quotedstr(pp) засунет в БД строку вместе с кавычками. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:04 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
[quot igs123]dgdogпропущено... Т.е. читаешь все источники данных - записываешь в один суммарный файл А потом уже пробегаешь по нему, делаешь свои проверки и пишешь что надо в базу... И (если ничего не путаю) - желательно в одной длинной транзакции. Трабл не как взять данные из баз. МОЯ проблема это страшная туча запросов к базе для проверки каждой проводки. ЦП вешается. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:06 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogВсе поля... все, все, все поля нужны. Заменить звездочку на перечень всех полей? Получу бонусы? Ладно, поделюсь мега_хакингом. :-) Есть в одной Табле почти 600 полей. В Дельфе сваял глобальную переменную, типа Full_Colum_Names:='Colim_1,Colim_2,... Colim_J '; И потом курю бамбук: form1.pfibquery4.SQL.Text:='select '+Full_Colum_Names+' from FULLTABLE where '. Так как в процессе жизни Табли кол-во и наименование полей менялось не однократно. И править их приходилось только в одном месте, а не елозить по всему коду. Ну и меньше кнобкотыкать приходится с меньшим числом очепяток. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:20 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogМОЯ проблема это страшная туча запросов к базе для проверки каждой проводки. ЦП вешается. Это - еще не проблема. :-) Тебя еще за индексы не крутили. А так, мирно дают ляписинку. ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:24 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogЦП вешается. Как тебе уже сказали, ЦПУ вешает не само выполнение запросов, а их препарирование. И, вполне вероятно, старт-коммит транзакций. Избавишься от этого - избавишься от проблемы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:27 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LInedgdogВсе поля... все, все, все поля нужны. Заменить звездочку на перечень всех полей? Получу бонусы? Ладно, поделюсь мега_хакингом. :-) Вот хакнул, так хакнул)) Разумное зерно есть, но вот в производительности твоя переменная против звездочки даст ли прибыль? Будем посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:42 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LIne, Понял да. уже выкинул за циклы два главных Query. Тестю. Ошибок не сыпится иладно. А как отработает пусть утром бухи смотрят. (ну базу закопировал конечно) Хм... ребят, а вот базу же можно тупо как файл скопировать в резерв (при выключенном сервере)? Понятно с мусором будет и т.п. Но как самый быстрый вариант прокатит? Жить будет? Блин, я сегодня столько узнал про Firebird...))) Ясно это верхушка айсберга, но все равно ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:48 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdog... но вот в производительности твоя переменная против звездочки даст ли прибыль?... ...Он над нами издевался, ОдноЦешник, что возьмешь... (R)емейк от мну. :-)))) Или ты думаешь, что всё написанное в коде после form1. - выполняется на FB-сервере? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:50 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov... старт-коммит транзакций. Избавишься от этого - избавишься от проблемы. автостарт транзакций и автокоммит компонентами, я так понял зло? Но не осилю сегодня перебирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:50 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogавтостарт транзакций и автокоммит компонентами, я так понял зло? Это не зло. Это полный П. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 21:54 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogА как отработает пусть утром бухи смотрят. (ну базу закопировал конечно) Ну так рихтовкой как раз и надо заниматься, когда на сервере ни кого нету. Тогда все изменения будут очам_видные. А еще лучше, хотя про это не заслужено забыли по не надобности того гурам, иметь с боку в свое мононопольное юзание сервер-профилировщик. Собраный из какого-нить старого компо-хлама, который всегда есть у атишников. Ну то железо, которое выкинуть жалко и в ход пустить не куда. На нем и будут очевидны ЛЮБЫЕ изменения в производительности, как в плюс, так и в минус. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 22:09 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Значит вынес 2 главные (саме частые) Query за цикл. Prepare за циклом. В цикле присвоить параметры Exec проработал Close. Так не так не понял. В работе импорта заметны реальные провалы ЦП уже не все время 100%. Уже хорошо. СПАСИБИЩЕ всем. (но пока правил нарушил логику ;-) задвоились часть проводок) Откатываю базу и спать. Завтра выкидывать все Query за цикл и разбираться с Транзакциями. Всем спасибо. Я СПАТЬ. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2016, 22:14 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
авторВ цикле присвоить параметры Exec проработал Close. Так не так не понял. Плохо. Теперь вкратце - пример с параметрами для Insert. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Что тут важно: 1. Компоненты транзакций на чтение и запись должны быть разными. Так же лучше разделить компоненты Query. К примеру, к одной транзакции привязываешь все читающие Query, а транзакций на запись лучше сделать по одной на компонент Query. 2. Компоненту транзакции на чтение хорошо бы присвоить классические параметры читающей транзакции: read read committed rec_version nowait. Это позволит стартовать ее всего один раз сразу после коннекта к базе данных и больше не трогать. Такая транзакция будет видеть все закоммиченные изменения на момент открытия SQL-запроса. Пока все. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2016, 05:22 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
ЛюбезныйавторВ цикле присвоить параметры Exec проработал Close. Так не так не понял. Плохо. ... 1. Компоненты транзакций на чтение и запись должны быть разными. ... Пока все. Да. Ну, че вилять то? Или врать?! Транзакций всего две. Одна на запись другая на чтение. Компоненты Pfibdataset и pFibQuery кончено раскиданы (по принципу эта Query только читает поэтому Read) по этим двум транзакциям. Вот. И вполне себе хватало пока базы грузились последовательно. При переделке в паралельную загрузку... получились АТОМНЫЕ грабли. Ночью пытался почитать про транзакции (дальше можно смеяться) С удивлением для себя понял, что транзакций может быть НЕ ДВЕ прописанные в Database :) Нет ну самому смешно. Но ребят я на ЖарПтице только дипломную программку писал))). Я не собирался быть админом Firebird и разработчиком такого монстра. Этож вспомогательная утилитка должна была быть и не больше. Но "партия сказала надо", "идея нормальная, PHP направление закрылось, хочешь остаться вот и рули этой темой". Ушел читать про транзакции... тяжело. Тяжело разобраться во всем и сразу. И в правильных настройках сервера и в правильном написании кода... транзакции, параметризация, индексы (тригеры, процедуры - как-то легче, помню чтоли?!!)... Примеры смотришь все просто, на своего монстра начинаешь переносить пи*дец. А база то уже работает. А бухи остановить её на минуту не дают. Пью вместо пива Афобазол и наплевав на все тычки и подгонки пытаюсь разобраться, прежде чем опять что-то дописывать переписывать. Ибо или я остаюсь на сопровождении нормального продукта... или ну его нафик ищу работу, пусть приходит грамотный чел и переписывает с NULL))). Фигня, прорвемся. Не в такие дали шагали. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2016, 08:43 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Любезный, не согласный я. Нужно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2016, 08:49 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
MikeDDЛюбезный, не согласный я. Нужно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
вот тут подробней бы. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2016, 09:11 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
[quot dgdog]Любезныйпропущено... тригеры, процедуры - как-то легче, помню чтоли не претендую на профи по FB, но.... еще один вариант (без кучи мелких выборок на клиента) DROP TABLE FOR_LOAD (если есть) CREATE TABLE FOR_LOAD (со всеми полями какие ты будешь заливать + check1...N, Check_SUM) Заливка исходных данных Потом либо в процедуре бежать по всему набору и делать проверки, либо с клиента вызывать (предварительно создав индексы) UPDATE FOR_LOAD SET check_1=1 WHERE условие при котором данные не должны заливаться UPDATE FOR_LOAD SET check_N=1.... после всех проверок UPDATE FOR_LOAD SET Check_SUM=check_1+....+check_n INSERT INTO ... FROM FOR_LOAD WHERE Check_SUM=0 ну либо UPDATE по какому-нибудь признаку а потом с клиента опять же по результатам проверок - можно результаты вытащить (что залилось, что обновилось, какие где ошибки и т.д.) и отправить кому следует ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2016, 09:15 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
[quot igs123]dgdogпропущено... не претендую на профи по FB, но.... еще один вариант (без кучи мелких выборок на клиента) DROP TABLE FOR_LOAD (если есть) CREATE TABLE FOR_LOAD (со всеми полями какие ты будешь заливать + check1...N, Check_SUM) Заливка исходных данных Потом либо в процедуре бежать по всему набору и делать проверки, либо с клиента вызывать (предварительно создав индексы) UPDATE FOR_LOAD SET check_1=1 WHERE условие при котором данные не должны заливаться UPDATE FOR_LOAD SET check_N=1.... после всех проверок UPDATE FOR_LOAD SET Check_SUM=check_1+....+check_n INSERT INTO ... FROM FOR_LOAD WHERE Check_SUM=0 ну либо UPDATE по какому-нибудь признаку а потом с клиента опять же по результатам проверок - можно результаты вытащить (что залилось, что обновилось, какие где ошибки и т.д.) и отправить кому следует Нагрузка на сервер в этом случае будет меньше? Хммм... но запилить все проверки в хранимых. Для меня это АД. Но вариант конечно ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2016, 09:33 |
|
|
start [/forum/topic.php?fid=40&msg=39279922&tid=1561790]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
132ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 503ms |
0 / 0 |