Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC и временная таблица на MySQL / 7 сообщений из 7, страница 1 из 1
31.07.2017, 04:23:12
    #39497460
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC и временная таблица на MySQL
Как проапдейтить созданную и заполненную временную таблицу через 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
31.07.2017, 04:38:53
    #39497462
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC и временная таблица на MySQL
Alexander2...
4) далее, если в новом FDQuery2 прописать
Код: sql
1.
   select * from my_Test


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

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

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

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

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

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

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

Да CachedUpdate = True.
Если не делать так, то ничего не происходит - вставка не происходит - колесико крутится и все....
...
Рейтинг: 0 / 0
31.07.2017, 08:48:38
    #39497508
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC и временная таблица на MySQL
чччД,
заменил 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
31.07.2017, 11:01:23
    #39497617
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDAC и временная таблица на MySQL
Alexander2,

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


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