Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, MYSQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:32 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, еще меня смущает что я в цикле запрос выполняю Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:35 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. Что-то глупость наблюдаю.... Ты перегружаешь на клиента ВСЕ документы только для того, чтобы посмотреть номер последнего? Ну, во-первых, кто сказал, что "Select * from documents" выдаст их в порядке возрастания????? Как СУБД на душу положит, так и выдаст, для сортироки обязательно надо использовать "order by". Во-вторых, зачем грузить ВСЕ ЗАПИСИ И ВСЕ ПОЛЯ? Это может быть огромный объем данных. Используй Max(id). В третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:36 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admесть смысл его использовать если есть куча процедур которые должны срабатывать в то же время что и запрос с DoEvents(работа с контролами , другими гридами , или игра самописная ))) Фраза "запрос с DoEvents" выдает, что ты опять не понял. Почитай еще несколько раз мой текст... Если запрос будет выполнен синхронно, одновременно с ним ты ничего не сделаешь. Если запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:39 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Shocker.Pro третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?.... ну да ошибка будет, в итоге ниче не вставится Shocker.ProЕсли запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен). типо этого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:45 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admтак вот может быть ситуация что какой сбой и в первую таблицу данные занеслись а во вторую нет (как вы сами такое реализуете )? то есть хочется все или ничего (транзакция называется по мойму) но как это на VB реализуется Я работаю с MSSQL. SQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет. В том числе, открывает и закрывает транзакции. Если бы ты работал с MSSQL, впрочем я бы посоветовал передать обе команды одним пакетом сразу с транзакцией. В MySQL тоже можно выполнить два запроса в одной строке, разделив их ";", но как и можно ли там открыть транзакцию - не знаю. ADO поддерживает транзакцию на своем уровне: BeginTrans, CommitTrans в коннекшне. Но я это не люблю, если у тебя прога рухнет, транзакция останется открытая на какое-то время (пока по таймауту не отвалится), таблицы останутся заблокированными для других пользователей.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:48 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Shocker.ProВ MySQL тоже можно выполнить два запроса в одной строке, разделив их ";" так и буду делать Shocker.ProSQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет отдаете так же ? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:54 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admвдруг не успеет отработать Что значит "не успеет"? Кто не успеет? Здесь все синхронно работает, пока предыдущая команда не выполнится, следующая не начнется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:54 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admShocker.Pro третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?.... ну да ошибка будет, в итоге ниче не вставится Почему не вставится? Вставится. Только ты вставишь содержимое в другой документ, не в свой, потому что получишь чужой идентификатор. aduka05admShocker.ProЕсли запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен). типо этого? там вообще нет DoEvents ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:57 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admShocker.Pro, Shocker.ProВ MySQL тоже можно выполнить два запроса в одной строке, разделив их ";" так и буду делать Можно собрать все в одну строку и скопом отправить на сервер. Только надо смотреть ограничение по длине выполняемой строки. И еще. В MSSQL есть команды для получения номера очередного ID-а, вставленного лично твоей сессией. Не знаю, можно ли это с MySQL. aduka05admShocker.ProSQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет отдаете так же ? Код: plaintext Вопрос не понят. Еще раз - я НЕ ВЫПОЛНЯЮ SQL-команд из VB. В MSSQL есть свой внутренний язык и такое понятие, как процедура. Я отдаю данные процедуре, а она уже сама разбирается, какие SQL-команды дать для записи в базу и как организовать транзакции. =================== ЗЫ: Еще совет (и, кажется, я тебе его уже давал ранее). Перед rs.Open обязательно делай rs.Close и Set rs = Nothing. ЗЗЫ: А вообще процедура query организована криво. Представь, что тебе надо открыть рекордсет, а у тебя один уже открыт. Или еще хуже - вызываешь внутри цикла какую-нить функцию, а она тоже вызывает query, которая подпортит тебе rs для вышестоящей функции. И вообще, логично не объявлять глобальную переменную rs, а переделать query с процедуры на функцию, которая возвращает ADODB.Recordset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 01:06 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ушел спать. тебе тут хватит пока для внимательного изучения.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 01:07 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, транзакцииMYSQLТранзакцией называется такая последовательность SQL-запросов, которая выполняется как единая, неделимая операция. Транзакция может быть либо выполнена целиком, либо не выполнена совсем. Третьего не дано. Доступ к записям таблиц, которые подвергаются изменению в ходе транзакции, блокируется для всех клиентов (кроме того, разумеется, который непосредственно инициировал транзакцию). Транзакции поддерживаются СУБД MySQL только для таблиц типа InnoDB (а также BDB — BerkeleyDB; это не обсуждавшийся нами ранее физический тип таблиц MySQL, разработанный фирмой Sleepycat). По умолчанию MySQL работает в режиме немедленного выполнения операторов SQL. Иными словами, любой SQL-запрос, модифицирующий таблицу, выполняется сразу же, и все изменения тут же фиксируются на диске. Этот режим контролируется системной переменной AUTOCOMMIT, которая по умолчанию принимает значение 1. Для того, чтобы отключить режим немедленного выполнения SQL-запросов, нужно установить переменную AUTOCOMMIT в 0: SET AUTOCOMMIT = 0; Результаты выполнения последующих SQL-запросов не будут фиксироваться на диске. Для того, чтобы завершить транзакцию, т. е. единомоментно зафиксировать результаты выполнения всех запросов, необходимо использовать оператор COMMIT. Для того же, чтобы отменить при необходимости действие SQL-операторов, составляющих транзакцию, т. е. вернуть базу данных в исходное состояние, применяется команда ROLLBACK. (После фиксации результатов транзакции при помощи оператора COMMIT использование оператора ROLLBACK уже не будет иметь смысла — транзакция завершена.) Вот как может выглядеть описание транзакции для перевода денег со счета на счет: SET AUTOCOMMIT = 0; UPDATE account SET balance = balance – 1000 WHERE id = 32768; UPDATE account SET balance = balance + 1000 WHERE id = 65536; COMMIT; SET AUTOCOMMIT = 1; А вот пример использования оператора ROLLBACK: SET AUTOCOMMIT = 0; UPDATE account SET balance = balance – 1000 WHERE id = 32768; UPDATE account SET balance = balance + 1000 WHERE id = 65536; ROLLBACK; SET AUTOCOMMIT = 1;Операция перевода средств со счета на счет, которую пытались выполнить два запроса UPDATE, будет отменена. В ряде случаев прибегать к изменению системной переменной AUTOCOMMIT не слишком удобно. Язык SQL предусматривает оператор START TRANSACTION, отключающий режим немедленного выполнения SQL-операторов. Этот режим остается выключенным до момента явного завершения транзакции при помощи оператора COMMIT или ROLLBACK. Пример нашей транзакции, осуществляющей перевод средств со счета на счет, таким образом, можно перефразировать: START TRANSACTION; UPDATE account SET balance = balance – 1000 WHERE id = 32768; UPDATE account SET balance = balance + 1000 WHERE id = 65536; COMMIT; Примечание Некоторые операторы SQL неявно завершают транзакцию, как если бы был вызван оператор COMMIT. В их числе CREATE DATABASE, DROP DATABASE, CREATE TABLE, DROP TABLE, START TRANSACTION, SET AUTOCOMMIT = 1 и ряд других, не рассмотренных нами. Shocker.Proтам вообще нет DoEvents ну да) поищу ка я примеры с DoEvents плюс ваша информация и все встанет по полочкам Shocker.ProЗдесь все синхронно работает, пока предыдущая команда не выполнится, следующая не начнется. точно Shocker.ProПочему не вставится? Вставится. Только ты вставишь содержимое в другой документ, не в свой, потому что получишь чужой идентификатор. точно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 01:07 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Proушел спать. тебе тут хватит пока для внимательного изучения.... это точно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 01:23 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admтранзакцииMYSQL ага, ну все то же самое важно собрать все команды в одну большую строку, обрамить началом и концом транзакции и выполнить разом. Но тут возникает вопрос о максимальной длине этой строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 10:03 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
теперь голову поломал на абсолютно обратной ситуации Код: plaintext 1. 2. при этом форма Form_SelectDate меняет константу dt_1 почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:53 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanus, Жарко. Ты сам понял, чего спросил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:56 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanusтеперь голову поломал на абсолютно обратной ситуации Код: plaintext 1. 2. при этом форма Form_SelectDate меняет константу dt_1 почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1 Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:57 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Ёпрст. Вчера всю ночь с Адукой тут общался, а это оказывается топик Шамануса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:57 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanus, А, вот Костя догадался... В общем, то, что ты открыл форму, никак не запрещает твой программе дальше выполняться. Иначе какая ж многозадачность. Исключение из этого Костя привел. Но тогда ты не сможешь переключаться на другие формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:01 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_OneShamanusтеперь голову поломал на абсолютно обратной ситуации Код: plaintext 1. 2. при этом форма Form_SelectDate меняет константу dt_1 почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1 Код: plaintext Спасибо Konst_One, но это не то, Если форма Form_SelectDate (это календарь) будет модальной, то на ней должны быть управляющие конструкции, которые сами будут менять значение текстбокса в форме iskl. А этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря. А я хочу так, есть глобальная переменная с датой, вызываем диалог календаря, в диалоге меняем переменную, при закрытии диалога устанавливаем значение даты в текстбокс. в VBA если я из одной формы вызывал другую, то выполнение кода прерывалось до закрытия вызванной формы т.е вот так Код: plaintext 1. 2. 3. VB не ждет, а считает, что если он сделал Show, то и ждать пока форма закроется не стоит. Shocker.Pro Жарко. Ты сам понял, чего спросил? трудности перехода с VBA на VB, помнишь я тебя спрашивал как оно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:09 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusKonst_OneShamanusтеперь голову поломал на абсолютно обратной ситуации Код: plaintext 1. 2. при этом форма Form_SelectDate меняет константу dt_1 почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1 Код: plaintext Спасибо Konst_One, но это не то, Если форма Form_SelectDate (это календарь) будет модальной, то на ней должны быть управляющие конструкции, которые сами будут менять значение текстбокса в форме iskl. А этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря. А я хочу так, есть глобальная переменная с датой, вызываем диалог календаря, в диалоге меняем переменную, при закрытии диалога устанавливаем значение даты в текстбокс. в VBA если я из одной формы вызывал другую, то выполнение кода прерывалось до закрытия вызванной формы т.е вот так Код: plaintext 1. 2. 3. VB не ждет, а считает, что если он сделал Show, то и ждать пока форма закроется не стоит. Shocker.Pro Жарко. Ты сам понял, чего спросил? трудности перехода с VBA на VB, помнишь я тебя спрашивал как оно :) тогда делайте через событие класса и вызывайте метод, в котором будет ожидание получения инфы из данного события вашей формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:11 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanus, Тебе нужно разнести вызов формы и программирование поля в любом случае в разные места. Далее надо получить событие от вызванной формы. Это можно сделать миллионом способов. К примеру, форма может сгенерировать событие, может вызывать метод вызвавшей формы. Может сама поменять тебе поле и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:14 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. вот так: Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:19 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_One, Shocker.Pro так и сделаю теперь судя по всему. Просто для портации готового кода не очень удобно конечно. Но будем доделывать. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:19 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36731591&tid=2159589]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 142ms |

| 0 / 0 |
