|
|
|
Добавление записи через класс
|
|||
|---|---|---|---|
|
#18+
Подскажите как правильно делают в такой ситуации. Есть КласА, в КласеА есть метод добавления записи в базу insert_record, insert_record "дергает" клас для работы с базой, и выполняет метод InsertRecordBase в котором создается транзакция, query, формируеться текст insert into... подставляет переданные значение для вставки и запись добавляется в базу. Для одиночной вставки вопросов нет. А если допустим необходимо вставить несколько записей через цикл (for I := 0 to 10 do). Как поступают в такой ситуации? В доставшемся коде я нашел примерно такую реализацию. Код: pascal 1. 2. 3. 4. 5. 6. В таком варианте insert_record при каждом добавлении записи (шаге в цикле) будет обращаться к InsertRecordBase которая в свою очередь будет создавать компоненты и в конце разрушать. Мне кажеться (перекрестился) ересью такое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2018, 20:15 |
|
||
|
Добавление записи через класс
|
|||
|---|---|---|---|
|
#18+
Sashaua, сразу создавай класс для вставки большого количества. А одна запись - лишь частный случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2018, 20:19 |
|
||
|
Добавление записи через класс
|
|||
|---|---|---|---|
|
#18+
1. Компоненты создаются в конструкторе класса, уничтожаются деструкторе 2. Компоненты создаются при первом обращении, уничтожаются деструкторе 3. Компоненты создаются и уничтожаются в специальных методах, которые вызываются перед первой вставкой и после последней Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2018, 20:49 |
|
||
|
Добавление записи через класс
|
|||
|---|---|---|---|
|
#18+
SashauaА если допустим необходимо вставить несколько записей через цикл (for I := 0 to 10 do). Мне кажеться (перекрестился) ересью такое решение.C идеологической т.з. - да, ересь, неправильно. Но пока это именно несколько (10-100) записей - можешь не париться, а вот если их понадобится много (>1000) записей - надо будет думать и дописывать/добавлять классы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2018, 21:52 |
|
||
|
Добавление записи через класс
|
|||
|---|---|---|---|
|
#18+
А что мешает просто сгенерировать все SQL-запросы, а потом отдать их компоненту работы с БД, уж не знаю, что там у вас, TFDQuery, TADOQuery,...? И да, разница в скорости между Код: pascal 1. 2. 3. 4. и Код: pascal 1. 2. 3. 4. 5. Колоссальная. В одном моем случае, когда я по незнанию сделал построчную вставку было около 210 сек на ЕМНИП под 100к запросов, и всего 7 сек, когда я сделал группировку по 10к запросов за Query.Exec. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2018, 10:41 |
|
||
|
Добавление записи через класс
|
|||
|---|---|---|---|
|
#18+
Beltar> А что мешает просто сгенерировать все SQL-запросы, Beltar> а потом отдать их компоненту работы с БД Структура классов. Которая уже есть и игнорировать которую будет ещё более идеологически неправильно. Повторю, если речь не о каких-то импортах и mass-insert-ах, то можно не париться. Ну или если "неаккуратненько", то сделать/добавить функционал, который на вход принимает массив(ы) и выполняет их одним скопом - в одной транзакции, одним запросом (prepare+цикл execute) и т.д. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2018, 13:09 |
|
||
|
Добавление записи через класс
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, Хочется акуратненько, можете поделится примером реализации, кучу инфы в нете пересмотрел а в голову ничего не приходит . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2018, 14:43 |
|
||
|
Добавление записи через класс
|
|||
|---|---|---|---|
|
#18+
Sashaua> можете поделится примером реализации Примером чего именно? У вас же уже есть струкура классов. Грубо говоря либо добавить в ваш TDBClass перекрытый (или новый - непринципиально) метод InsertRecordBase c параметрами data : List/array of TBusinessClass, а снаружи соответственно создавать и передавать этот массив/список. Это если аккуратненько. Если менее ааккуратненько и более удобненько и эффективненько - то же самое, но параметр будет data : array of ParamValues без экземпляров класса. Если нужно будет ещё более эффективненько, то можно внутри проводить это не построчно, а через ArrayDML - снаружи ничего не изменится. Но это требуется только при серьёзных объёмах вставок, а не пара десятков. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2018, 16:41 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39743839&tid=2040027]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
152ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 474ms |

| 0 / 0 |
