powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC и временная таблица на MySQL
7 сообщений из 7, страница 1 из 1
FireDAC и временная таблица на MySQL
    #39497460
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как проапдейтить созданную и заполненную временную таблицу через FireDAC?
1) создаю временную таблицу, используя компонент FDQuery1
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set @queryString = 'DROP TEMPORARY TABLE IF EXISTS my_Test';
PREPARE stmt1 FROM @queryString;
EXECUTE stmt1;
deallocate prepare stmt1;
set @queryString = 'CREATE TEMPORARY TABLE my_Test (`Id_Sample` int,`SampleId` varchar(100))';
PREPARE stmt1 FROM @queryString;
EXECUTE stmt1;
deallocate prepare stmt1;
select * from my_Test;


2) на форме в цикле заполняю ПУСТУЮ таблицу данными
Код: pascal
1.
2.
3.
4.
5.
6.
     for r:= 2 to asgSource.RowCount-1 do
      begin
       dmSample.fdSample.Append;
       dmSample.fdSample.FieldByName('SampleId').AsString:= asgSource.Cells[mySample,r];
      end;
      dmSample.fdSample.Post;


3) Надеясь, что в текущей сессии юзер ВИДИТ эту временную таблицу, делаю Update этой таблицы на стороне сервера, для
этого прописал FDCommand1 - чтобы из справочной таблицы взяла и поставила Id совпадающих образцов
Код: sql
1.
2.
3.
4.
5.
set @queryString = 'Update my_Test t1
inner join Sample t2 on t1.SampleId=t2.Name set t1.Id_Sample=t2.Id';
PREPARE stmt1 FROM @queryString;
EXECUTE stmt1;
deallocate prepare stmt1;


4) далее, если в новом FDQuery2 прописать
Код: sql
1.
   select * from my_Test


то не видит записи из этой таблицы, но не ругается что таблицы нету.
Что далать? (Чернышевский (с))
...
Рейтинг: 0 / 0
FireDAC и временная таблица на MySQL
    #39497462
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander2...
4) далее, если в новом FDQuery2 прописать
Код: sql
1.
   select * from my_Test


то не видит записи из этой таблицы, но не ругается что таблицы нету.
Что далать? (Чернышевский (с))
Проверяй наличие данных на всех этапах.
Например, проверь в "старом" TFDQuery. Используя fdSample, в смысле.
...
Рейтинг: 0 / 0
FireDAC и временная таблица на MySQL
    #39497463
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

в конце 2 шага после выполнения dmSample.fdSample.Post;
я вижу данные в гриде - но Id_Sample не заполнен, SampleID (строкове значение) - есть

потом я выполняю 3 шаг...

а как увидеть обновленные данные то?
...
Рейтинг: 0 / 0
FireDAC и временная таблица на MySQL
    #39497464
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander2чччД,

в конце 2 шага после выполнения dmSample.fdSample.Post;
я вижу данные в гриде - но Id_Sample не заполнен, SampleID (строкове значение) - есть

потом я выполняю 3 шаг...

а как увидеть обновленные данные то?
А у тебя FDQuery2 - точно в той же сессии? А не кэшируются ли у тебя изменения в датасете, где ты append's делаешь?
...
Рейтинг: 0 / 0
FireDAC и временная таблица на MySQL
    #39497465
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,
авторА у тебя FDQuery2 - точно в той же сессии?
как это понять? я сразу после выполнения вставки данных вызываю открытие fdQuery2

Да CachedUpdate = True.
Если не делать так, то ничего не происходит - вставка не происходит - колесико крутится и все....
...
Рейтинг: 0 / 0
FireDAC и временная таблица на MySQL
    #39497508
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,
заменил fdQuery1 на fdCommand и в нем прописал создание временной таблицы, потом открываю через fdQuery и вижу пустую таблицу и заполняю ее через тот кусок кода.
Оказывается, что временная таблица заполняется - только очень медленно, примерно 4 минуты для 1100 записей из трех колонок (по 30,100,100 символов). CachedUpdate = True.

Код: pascal
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.
          
...
       with dmWell.fdCreateTemp do
            begin
             Prepared  := True;
             Execute;
            end;

    dmWell.fdIncomingPWS.Active := True;
    dmWell.fdIncomingPWS.DisableControls;
     for r:= 2 to asgImportPreview.RowCount-1 do
      begin
       dmWell.fdIncomingPWS.Append;
       dmWell.fdIncomingPWS.FieldByName('SampleId').AsString:= asgImportPreview.Cells[SampleIDCol,r];
       dmWell.fdIncomingPWS.FieldByName('WellName').AsString:= asgImportPreview.Cells[WellIDCol,r];
       dmWell.fdIncomingPWS.FieldByName('ProjectId').AsString:= asgImportPreview.Cells[ProjectIDCol,r];
      end;
      try
       dmWell.fdIncomingPWS.ApplyUpdates(-1);
      finally
       dmWell.fdIncomingPWS.Active:=False;
       dbgIncomingData.Refresh;
       ShowMessage('Verified Sample identificators');
      end;
      dmWell.fdIncomingPWS.EnableControls;

           with dmWell.fdUpdateTemp do
            begin
             Prepared  := True;
             Execute;
            end;

       dmWell.fdIncomingPWS.Active:=True;  // вижу обновленные данные
...



Потом выполняю второй fdCommand для Update временной таблицы из справочных таблиц и вновь открываю таблицу в гриде - все работает.
Что можно сделать, чтобы ускорить процесс ввода данных во временную таблицу на MySQL сервере?
...
Рейтинг: 0 / 0
FireDAC и временная таблица на MySQL
    #39497617
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander2,

ну прочти, что значит кэшед апдайте, и сразу поймешь, отчего данных в табличке не было.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC и временная таблица на MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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