powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Окно загрузки файла
25 сообщений из 96, страница 3 из 4
Окно загрузки файла
    #36731552
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
MYSQL
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731553
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
еще меня смущает что я в цикле запрос выполняю
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
For i =  1  To FlexGridPlus4.Rows -  1 
strsql = "insert into registr (doc_id,client_id, usluga_id, price , amount,date, time) values " _
+ "(" + Str(naklnum) + "," + Str(Combo1.ItemData(Combo1.ListIndex)) + "," + Str(FlexGridPlus4.TextMatrix( 1 ,  4 )) + "," _
 + Str(massprice(FlexGridPlus4.TextMatrix( 1 ,  4 ))) + "," + Str(FlexGridPlus4.TextMatrix( 1 ,  2 )) + "," + _
 "'" + Text2.Text + "'" + "," + "'" + Text3.Text + "')"
Debug.Print strsql
query strsql
FlexGridPlus4.RemoveItem  1 
Next i
вдруг не успеет отработать
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731555
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
strsql = "Select * from documents"
query strsql
rs.MoveLast
naklnum = rs.Fields("id")

Что-то глупость наблюдаю....
Ты перегружаешь на клиента ВСЕ документы только для того, чтобы посмотреть номер последнего?

Ну, во-первых, кто сказал, что "Select * from documents" выдаст их в порядке возрастания????? Как СУБД на душу положит, так и выдаст, для сортироки обязательно надо использовать "order by".
Во-вторых, зачем грузить ВСЕ ЗАПИСИ И ВСЕ ПОЛЯ? Это может быть огромный объем данных. Используй Max(id).
В третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?....
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731558
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admесть смысл его использовать если есть куча процедур которые должны срабатывать в то же время что и запрос с DoEvents(работа с контролами , другими гридами , или игра самописная )))
Фраза "запрос с DoEvents" выдает, что ты опять не понял. Почитай еще несколько раз мой текст...

Если запрос будет выполнен синхронно, одновременно с ним ты ничего не сделаешь.
Если запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен).
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731561
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Shocker.Pro третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?....
ну да ошибка будет, в итоге ниче не вставится
Shocker.ProЕсли запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен).
типо этого?
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731565
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admтак вот может быть ситуация что какой сбой и в первую таблицу данные занеслись
а во вторую нет (как вы сами такое реализуете )?
то есть хочется все или ничего (транзакция называется по мойму)
но как это на VB реализуется
Я работаю с MSSQL. SQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет. В том числе, открывает и закрывает транзакции.
Если бы ты работал с MSSQL, впрочем я бы посоветовал передать обе команды одним пакетом сразу с транзакцией. В MySQL тоже можно выполнить два запроса в одной строке, разделив их ";", но как и можно ли там открыть транзакцию - не знаю.

ADO поддерживает транзакцию на своем уровне: BeginTrans, CommitTrans в коннекшне. Но я это не люблю, если у тебя прога рухнет, транзакция останется открытая на какое-то время (пока по таймауту не отвалится), таблицы останутся заблокированными для других пользователей....
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731571
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Shocker.ProВ MySQL тоже можно выполнить два запроса в одной строке, разделив их ";"
так и буду делать
Shocker.ProSQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет
отдаете так же ?
Код: plaintext
rs.Open "Select * from uslugi"
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731573
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admвдруг не успеет отработать
Что значит "не успеет"? Кто не успеет?
Здесь все синхронно работает, пока предыдущая команда не выполнится, следующая не начнется.
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731575
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?....
ну да ошибка будет, в итоге ниче не вставится
Почему не вставится? Вставится. Только ты вставишь содержимое в другой документ, не в свой, потому что получишь чужой идентификатор.

aduka05admShocker.ProЕсли запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен).
типо этого?
там вообще нет DoEvents
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731582
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
Shocker.ProВ MySQL тоже можно выполнить два запроса в одной строке, разделив их ";"
так и буду делать

Можно собрать все в одну строку и скопом отправить на сервер.
Только надо смотреть ограничение по длине выполняемой строки.
И еще. В MSSQL есть команды для получения номера очередного ID-а, вставленного лично твоей сессией. Не знаю, можно ли это с MySQL.

aduka05admShocker.ProSQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет
отдаете так же ?
Код: plaintext
rs.Open "Select * from uslugi"

Вопрос не понят. Еще раз - я НЕ ВЫПОЛНЯЮ SQL-команд из VB. В MSSQL есть свой внутренний язык и такое понятие, как процедура. Я отдаю данные процедуре, а она уже сама разбирается, какие SQL-команды дать для записи в базу и как организовать транзакции.

===================
ЗЫ: Еще совет (и, кажется, я тебе его уже давал ранее). Перед rs.Open обязательно делай rs.Close и Set rs = Nothing.

ЗЗЫ: А вообще процедура query организована криво. Представь, что тебе надо открыть рекордсет, а у тебя один уже открыт. Или еще хуже - вызываешь внутри цикла какую-нить функцию, а она тоже вызывает query, которая подпортит тебе rs для вышестоящей функции.
И вообще, логично не объявлять глобальную переменную rs, а переделать query с процедуры на функцию, которая возвращает ADODB.Recordset.
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731583
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ушел спать. тебе тут хватит пока для внимательного изучения....
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731585
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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Почему не вставится? Вставится. Только ты вставишь содержимое в другой документ, не в свой, потому что получишь чужой идентификатор.
точно
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731591
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proушел спать. тебе тут хватит пока для внимательного изучения....
это точно
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36731832
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admтранзакцииMYSQL
ага, ну все то же самое

важно собрать все команды в одну большую строку, обрамить началом и концом транзакции и выполнить разом. Но тут возникает вопрос о максимальной длине этой строки
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732770
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь голову поломал на абсолютно обратной ситуации

Код: plaintext
1.
2.
Form_SelectDate.Show
Iskl.TextBox8.Value = dt_1

при этом форма Form_SelectDate меняет константу dt_1

почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732781
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shamanus,

Жарко.
Ты сам понял, чего спросил?
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732786
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shamanusтеперь голову поломал на абсолютно обратной ситуации

Код: plaintext
1.
2.
Form_SelectDate.Show
Iskl.TextBox8.Value = dt_1

при этом форма Form_SelectDate меняет константу dt_1

почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1


Код: plaintext
Form_SelectDate.Show vbModal
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732787
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёпрст. Вчера всю ночь с Адукой тут общался, а это оказывается топик Шамануса.
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732796
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shamanus,

А, вот Костя догадался...
В общем, то, что ты открыл форму, никак не запрещает твой программе дальше выполняться. Иначе какая ж многозадачность.

Исключение из этого Костя привел.
Но тогда ты не сможешь переключаться на другие формы.
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732818
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneShamanusтеперь голову поломал на абсолютно обратной ситуации

Код: plaintext
1.
2.
Form_SelectDate.Show
Iskl.TextBox8.Value = dt_1

при этом форма Form_SelectDate меняет константу dt_1

почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1


Код: plaintext
Form_SelectDate.Show vbModal


Спасибо Konst_One, но это не то,
Если форма Form_SelectDate (это календарь) будет модальной, то на ней должны быть управляющие конструкции, которые сами будут менять значение текстбокса в форме iskl. А этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря.

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

в VBA если я из одной формы вызывал другую, то выполнение кода прерывалось до закрытия вызванной формы

т.е вот так
Код: plaintext
1.
2.
3.
Form_SelectDate.Show
' тут VBA ждет пока закроем форму Form_SelectDate
Iskl.TextBox8.Value = dt_1

VB не ждет, а считает, что если он сделал Show, то и ждать пока форма закроется не стоит.

Shocker.Pro Жарко.
Ты сам понял, чего спросил?

трудности перехода с VBA на VB, помнишь я тебя спрашивал как оно :)
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732828
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShamanusKonst_OneShamanusтеперь голову поломал на абсолютно обратной ситуации

Код: plaintext
1.
2.
Form_SelectDate.Show
Iskl.TextBox8.Value = dt_1

при этом форма Form_SelectDate меняет константу dt_1

почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1


Код: plaintext
Form_SelectDate.Show vbModal


Спасибо Konst_One, но это не то,
Если форма Form_SelectDate (это календарь) будет модальной, то на ней должны быть управляющие конструкции, которые сами будут менять значение текстбокса в форме iskl. А этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря.

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

в VBA если я из одной формы вызывал другую, то выполнение кода прерывалось до закрытия вызванной формы

т.е вот так
Код: plaintext
1.
2.
3.
Form_SelectDate.Show
' тут VBA ждет пока закроем форму Form_SelectDate
Iskl.TextBox8.Value = dt_1

VB не ждет, а считает, что если он сделал Show, то и ждать пока форма закроется не стоит.

Shocker.Pro Жарко.
Ты сам понял, чего спросил?

трудности перехода с VBA на VB, помнишь я тебя спрашивал как оно :)


тогда делайте через событие класса и вызывайте метод, в котором будет ожидание получения инфы из данного события вашей формы.
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732834
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shamanus,

Тебе нужно разнести вызов формы и программирование поля в любом случае в разные места. Далее надо получить событие от вызванной формы. Это можно сделать миллионом способов. К примеру, форма может сгенерировать событие, может вызывать метод вызвавшей формы. Может сама поменять тебе поле и т.п.
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732854
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Form_SelectDate.Show
' тут VBA ждет пока закроем форму Form_SelectDate
Iskl.TextBox8.Value = dt_1


вот так:

Код: plaintext
1.
dt = MyPublicModule.ShowAndWaitValue
Iskl.TextBox8.Value = dt


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
'Module MyPublicModule
Public Function ShowAndWaitValue() as Date
Dim cls as MyClass 'класс вашей формы

  Set cls = New MyClass
  cls.Show
  Do while Not cls.Result 'boolean проперти, устанавливается в True когда меняете значение исходящей даты на форме 
      DoEvents
  Loop
  ShowAndWaitValue = cls.ResultDate 'исходящее значение даты на вашей форме
  Set cls = Nothing
   
End Function
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732856
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One, Shocker.Pro

так и сделаю теперь судя по всему. Просто для портации готового кода не очень удобно конечно.
Но будем доделывать.

Спасибо
...
Рейтинг: 0 / 0
Окно загрузки файла
    #36732860
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Еще и готовый код сразу. Спасибо большое.
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 3 из 4
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Окно загрузки файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]