Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2013, 08:32   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Одновременная запись в базу данных MySQL

Имеется база данных MySQL в которую записываются данные с весовых терминалов. Данные считываются в потоках через сокеты. При одовременном взвешивании выскакивает ошибка.
Код записи привожу
Код:
try
sleep(500);
MainForm.zQuery1.SQL.Clear;
MainForm.zQuery1.SQL.Add ('INSERT INTO base (Date_posting, Time_posting, num, Massa, Name, Image, Com, BaudRate, Organization, Location, IP, Note, Model, Equopment, Linkey, Stable_weight, Image_kamera)' );

MainForm.zQuery1.SQL.Add(' Values (:date1, :date2, 1, :massa, :name,''image'', :port, :BaudRate, :Organization, :Location, :Ip, :Note, :Model, :Equopment, :Linkey, 0, :adress)');
d3:=Trunc(Date);
d2:=frac(time);
MainForm.zQuery1.ParamByName('date1').Value:=d3;
MainForm.zQuery1.ParamByName('date2').Value:=d2;
MainForm.zQuery1.ParamByName('massa').Value:=MainForm.Edit1.Text;
MainForm.zQuery1.ParamByName('name').Value:=MainForm.labelModel1.Caption+' '+MainForm.LabelEquopment1.Caption;
MainForm.zQuery1.ParamByName('port').Value:=MainForm.labelPort1.Caption;
MainForm.zQuery1.ParamByName('BaudRate').Value:=MainForm.LabelBaudRate1.Caption;
MainForm.zQuery1.ParamByName('Organization').Value:=MainForm.LabelOrganization1.Caption;
MainForm.zQuery1.ParamByName('Location').Value:=MainForm.LabelLocation1.Caption;
MainForm.zQuery1.ParamByName('Ip').Value:=MainForm.LabelIp1.Caption;
MainForm.zQuery1.ParamByName('Note').Value:=MainForm.labelNote1.Caption;
MainForm.zQuery1.ParamByName('Model').Value:=MainForm.labelModel1.Caption;
MainForm.zQuery1.ParamByName('Equopment').Value:=MainForm.labelEquopment1.Caption;
MainForm.zQuery1.ParamByName('Linkey').Value:=MainForm.labelLinkey1.Caption;
MainForm.zQuery1.ParamByName('adress').Value:=OptionForm.DirectoryEdit1.Text+'\NO.jpg';

MainForm.zQuery1.ExecSQL;
 Application.ProcessMessages;  
Except
end;
Aleksandr вне форума Ответить с цитированием
Старый 13.11.2013, 08:50   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) какая ошибка?
2) надеюсь, в структуре таблицы base имеется автоинкрементное ключевое поле?
3)
Цитата:
Код:
Except
end;
думаете, что "душить" исключение - это хороший стиль программирования?! Уж, хотя бы для отладки там должна быть выдача сообщения об ошибке!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.11.2013, 08:55   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Ошибку уже не помню. Потому что не так часто бывает одновременное взвешивание. Если в течении дня будет, то я скину ошибку.
По поводу базы ключевое поле есть key1
Изображения
Тип файла: jpg база.jpg (104.3 Кб, 127 просмотров)
Aleksandr вне форума Ответить с цитированием
Старый 13.11.2013, 09:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а что за поле Linkey ?
Может в нём и проблема?

p.s. без скрина ошибки можно только гадать.
скрин нужен по любому!
Хотя, не поручусь на 100%, что и наличие скрина позволит гарантировать нахождение проблемы
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.11.2013, 09:28   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Данные считываются в потоках
И приведенный код тоже в потоке? Если да, то ошибка заложена изначально - одновременное обращение к zQuery1 из разных потоков. Да и к визуальным объектам есть обращение
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2013, 09:41   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Application.ProcessMessages;
и это в потоке? тогда тут ваще все сплошная ошибка
eval вне форума Ответить с цитированием
Старый 13.11.2013, 09:48   #7
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

У каждого потока у меня свои zQuery, Edit, labelModel, LabelEquopment, LabelIP,
LabelPort и тд.
Через Linkey таблица base связана с таблицей organization.
А где лучше расположить Application.ProcessMessages;

Последний раз редактировалось Aleksandr; 13.11.2013 в 09:55.
Aleksandr вне форума Ответить с цитированием
Старый 13.11.2013, 09:55   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это как? zQuery нужно динамически в потоке создавать. Для VCL не важно, что для каждого свои, все равно синхронизировать нужно. ProcessMessages из потока на анекдот похоже
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2013, 11:59   #9
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Если я буду создавать zQuery, то мне создавать DataSource для каждого динамически созданного zQuery?
Aleksandr вне форума Ответить с цитированием
Старый 13.11.2013, 12:08   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А зачем DataSource? Он обычно нужен для привязки датасетов к визуальным объектам, гридам например

ADD

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

Последний раз редактировалось Аватар; 13.11.2013 в 12:17.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в базу данных elena111 ASP.NET 7 10.05.2013 09:56
php внесение в базу данных mysql solution PHP 17 27.07.2011 14:01
Как загрузить в базу данных MySQL таблицу ? pufystyj PHP 4 19.02.2011 20:18
Запись из файла txt или mdb в базу данных DerSky БД в Delphi 6 09.06.2008 12:50
как выгрузить базу данных из MySQL в Access??? TRANE Помощь студентам 5 03.12.2007 13:22