Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 39
MS Access

Как узнать, что данные успешно добавились в БД?

30.03.2016, 18:29. Показов 981. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сложилась такая ситуация: добавляется данные через INSERT в программе на делфи и почти сразу же достаются эти данные из БД для отображения всякой статистики и часто запрос на выборку данных не застает эти данные в БД, а только через несколько секунд. Можно ли как-нибудь узнать что данные успешно добавились в БД, чтобы открывать форму с статистикой только, когда все данные будут добавлены?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2016, 18:29
Ответы с готовыми решениями:

есть таблица в миниатюре. нужно что бы когда ставим галочку данные строки добавились в другую таблицу
Доброго времени суток, помогите пожалуйста сделать. есть таблица в миниатюре. нужно что бы когда ставим галочку данные строки...

Данные не заносится в базу данных, несмотря на то, что данные проверку успешно проходят.
Здравствуйте, у меня есть регистрация вот код <?php if(!defined("access")){die();} Class Register{ //account email private...

Программа не выводит данные при том, что успешно компилируется
вот собственно код самой программы: program fdggf; var a,b,e,c,fa,fb,fc,: real; begin write ('Введите a: '); readln (a); ...

13
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
30.03.2016, 23:03
Предположу, что вы работаете с Акцесом, обычно там при работе в многопользовательском режиме наблюдаются такого рода задержки. Лучшим и наверное самым простым вариантом будет перейти на нормальную Клиент-Серверную БД. Что за БД у вас?
0
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 39
31.03.2016, 12:10  [ТС]
обычная access бдшка, с монопольным доступом
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,170
Записей в блоге: 3
31.03.2016, 12:15
покажите как вставляете и как достаете
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
31.03.2016, 12:26
А свойство CursorLocation у вас как выставлено?
0
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 39
31.03.2016, 12:53  [ТС]
Свойство CursorLocation у компонента ADOConnection выставлено на clUseClient

Примеры запросов, использую ADOQuery, часто использую циклы:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for i := 0 to High(RawReacPerSym) do
  begin
    with DM.ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('INSERT INTO ReactionPerSymbols');
      SQL.Add('(User_ID, Symbol, Reaction, ExDate, ExName, FingerGroup, IsClassWork)');
      SQL.Add('VALUES (:User_ID, :Symbol, :Reaction, :ExDate, :ExName, :FingerGroup, :IsClassWork)');
      Parameters.ParamByName('User_ID').Value := fAut.User_ID;
      Parameters.ParamByName('Symbol').Value := RawReacPerSym[i, 1];
      Parameters.ParamByName('Reaction').Value := RawReacPerSym[i, 0];
      Parameters.ParamByName('ExDate').Value := BeginTime;
      Parameters.ParamByName('ExName').Value := ExName;
      Parameters.ParamByName('FingerGroup').Value := RawReacPerSym[i, 2];
      if (Mode = tmClassWork) or (Mode = tmDiagnostic) then
       Parameters.ParamByName('IsClassWork').Value := True
      else
       Parameters.ParamByName('IsClassWork').Value := False;
      ExecSQL;
    end;
  end;
Delphi
1
DM.SelQuery('SELECT SUM(Reaction) / COUNT(Symbol), Symbol, FingerGroup FROM ReactionPerSymbols WHERE User_ID = :p1 AND ExDate = :p2 GROUP BY Symbol, FingerGroup', [fAut.User_ID, MyNames[ComboBox5.ItemIndex, 0]]);
Процедура SelQuery реализована так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TDM.SelQuery(SQLText : String; MyParams: array of Variant);
var
  i: Integer;
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add(SQLText);
 
    for i := 0 to High(MyParams) do
      Parameters.ParamByName('p' + IntToStr(i + 1)).Value := MyParams[i];
 
    Open;
  end;
end;
И есть еще вариант процедуры без параметров, но думаю смысла нет его выкладывать здесь.
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,170
Записей в блоге: 3
31.03.2016, 13:09
мне кажется из-за циклов запросы выстраиваются в очередь и ждут

ссд и проц с частотой побольше
0
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 39
31.03.2016, 14:41  [ТС]
Я вообще то спрашивал как можно узнать что все запросы успешно выполнились и новые данные в бд записались
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,170
Записей в блоге: 3
31.03.2016, 15:07
в цикле не выполнять запрос, а только формировать текстовую строку
потом в транзакции все выполнить
на время транзакции повесить табличку
0
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 39
31.03.2016, 15:25  [ТС]
Можете написать пример как это делать?
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,170
Записей в блоге: 3
31.03.2016, 15:37
а самому?
http://docwiki.embarcadero.com... s_(FireDAC)
0
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 39
31.03.2016, 15:59  [ТС]
Самому не получится, поэтому и прошу пример
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,170
Записей в блоге: 3
31.03.2016, 16:04
там по ссылке все есть

Цитата Сообщение от Fasta Посмотреть сообщение
Самому не получится
почему не получится?

Не по теме:

"надо верить Странникс" (с)

0
0 / 0 / 0
Регистрация: 13.09.2011
Сообщений: 39
05.04.2016, 17:12  [ТС]
Так верно? Я не понял как можно в цикле сформировать все строки и потом их выполнить, ведь они у меня составляются с параметрами.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
DM.ADOConnection1.BeginTrans;
  MyForm.Show;
 
  try
    for i := 0 to 8 do
    begin
      if Fingers[i, 1] <> 0 then
      begin
        With DM.ADOQuery1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('INSERT INTO ReactionFingers (User_ID, Reaction, FingerName, ExDate, ExName, FingerPos)');
          SQL.Add('VALUES (:User_ID, :Reaction, :FingerName, :ExDate, :ExName, :FingerPos)');
          Parameters.ParamByName('User_ID').Value := fAut.User_ID;
          Parameters.ParamByName('Reaction').Value := Fingers[i, 0];
          Parameters.ParamByName('FingerName').Value := FingersName[i];
          Parameters.ParamByName('ExName').Value := ExName;
          Parameters.ParamByName('ExDate').Value := BeginTime;
          Parameters.ParamByName('FingerPos').Value := i;
          ExecSQL;
        end;
      end;
    end;
 
    for i := 0 to High(RawReacPerSym) do
    begin
      with DM.ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('INSERT INTO ReactionPerSymbols');
        SQL.Add('(User_ID, Symbol, Reaction, ExDate, ExName, FingerGroup, IsClassWork)');
        SQL.Add('VALUES (:User_ID, :Symbol, :Reaction, :ExDate, :ExName, :FingerGroup, :IsClassWork)');
        Parameters.ParamByName('User_ID').Value := fAut.User_ID;
        Parameters.ParamByName('Symbol').Value := RawReacPerSym[i, 1];
        Parameters.ParamByName('Reaction').Value := RawReacPerSym[i, 0];
        Parameters.ParamByName('ExDate').Value := BeginTime;
        Parameters.ParamByName('ExName').Value := ExName;
        Parameters.ParamByName('FingerGroup').Value := RawReacPerSym[i, 2];
        if (Mode = tmClassWork) or (Mode = tmDiagnostic) then
         Parameters.ParamByName('IsClassWork').Value := True
        else
         Parameters.ParamByName('IsClassWork').Value := False;
        ExecSQL;
      end;
    end;
 
    with DM.ADOQuery1 do
    begin
      SQL.Clear;
      SQL.Add('INSERT INTO [ResultExercises]');
      SQL.Add('(Название_упражнения, Результат, MostFastFinger, MostSlowFinger,');
      SQL.Add('ID_User, ExDate, Mistakes, Duration, ExLength, IsClassWork, isLevel, Mark)');
      SQL.Add('VALUES (:Title, :Result, :MostFastFinger, :MostSlowFinger,');
      SQL.Add(':User_ID, :ExDate, :Mistakes, :Duration, :ExLength, :IsClassWork, :isLevel, :Mark)');
      Parameters.ParamByName('Title').Value := ExName;
      Parameters.ParamByName('Result').Value := Speed * 60;
      Parameters.ParamByName('User_ID').Value := fAut.User_ID;
      Parameters.ParamByName('ExDate').Value := BeginTime;
      Parameters.ParamByName('Mistakes').Value := Mistake;
      Parameters.ParamByName('Duration').Value := Time;
      Parameters.ParamByName('ExLength').Value := Length(RichEdit1.Text);
      Parameters.ParamByName('MostFastFinger').Value := DetectFL_Finger('Fast');
      Parameters.ParamByName('MostSlowFinger').Value := DetectFL_Finger('Slow');
 
      if Mode = tmClassWork then
      begin
        Parameters.ParamByName('IsClassWork').Value := True;
        Parameters.ParamByName('Mark').Value := fClassWork.Marks(Trunc(Speed * 60));
      end;
 
      if (Mode = tmClassWork) or (Mode = tmDiagnostic) then
        Parameters.ParamByName('isLevel').Value := Level;
 
      ExecSQL;
    end;
 
    if (Mode = tmClassWork) or (Mode = tmDiagnostic) then
    begin
      DM.SelQuery('SELECT IsFirstDiag FROM Users WHERE ID = :p1', [fAut.User_ID]);
 
      if DM.ADOQuery1.FieldByName('IsFirstDiag').AsBoolean = False then
      begin
        With DM.ADOQuery1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('UPDATE Users SET IsFirstDiag = :p1 WHERE ID = :p2');
          Parameters.ParamByName('p1').Value := True;
          Parameters.ParamByName('p2').Value := fAut.User_ID;
          ExecSQL;
        end;
      end;
    end;
 
    DM.ADOConnection1.CommitTrans;
    MyForm.Close;
    FreeAndNil(MyForm);
  except
    DM.ADOConnection1.RollbackTrans;
    ShowMessage('Ошибка сохранения');
  end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2016, 17:12
Помогаю со студенческими работами здесь

Как узнать, успешно ли установлен пакет xhprof на linux?
С линуксом знаком пару дней. Устанавливал пакет xhprof (профилирование для php) по вот этой инструкции -...

Reports 1 загрузился успешно, а при попытке загрузить 2 и 3 появляется надпись, что не все данные были записаны в реестр
Здравствуйте! У меня тоже семерка. Reports 1 загрузился успешно, а при попытке загрузить 2 и 3 появляется надпись, что не все данные были...

Как узнать, что есть данные для ввода, которые можно забрать std::cin
Всем здравствуйте! У меня есть параллельный поток, в котором нужно собирать данные с помощью std::cin. Но чтобы произвести эту...

При запуске браузера Яндекс добавились вкладки с рекламными сайтами что делать?
Доброго времени суток! недавно скачала программу, но после установки Яндекс браузер сам начал открывать вкладки с рекламой, после...

Как узнать, есть ли данные в textbox2, чтобы другие данные добавлялись в textbox3 из combobox?
как узнать есть данные в textbox2 чтобы другие данные добавлялись textbox3 из combobox


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru