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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2013, 09:57   #21
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,799
По умолчанию

Первым делом посмотрел, есть ли в SQLite аналог merge. Нашел insert or replace или просто replace. Если используемые компоненты не знают про такую конструкцию, команду вставки придется формировать вручную. Мне кажется, что оно стоит того.

Но можно и на клиенте, как советует Stilet. Хотя "на клиенте" применительно к SQLite мне кажется оксюмороном.
Vapaamies вне форума Ответить с цитированием
Старый 12.08.2013, 10:26   #22
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
"на клиенте" применительно к SQLite мне кажется оксюмороном.
Я выше предлагал достать из больнички проггера-1С и дать ему задание. Я тоже бы не делал это на клиенте, или на сервере - короче не делал бы так, но судя по всему автор просто хочет немного поморочится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2013, 12:55   #23
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я выше предлагал достать из больнички проггера-1С и дать ему задание. Я тоже бы не делал это на клиенте, или на сервере - короче не делал бы так, но судя по всему автор просто хочет немного поморочится.
Да, я тут морочусь уже не первый день. Подкиньте пожалуйста пример проверки перед вставкой записи по полю KOD.
Kerby666 вне форума Ответить с цитированием
Старый 12.08.2013, 13:52   #24
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

может всё-таки проще будет залить весь файл во временную табличку и потом запросом вычистить её же от тех записей которые в любом случае не попадут в основную таблицу. А оставшиеся уже дописать\перезаписать в основную
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 12.08.2013, 14:07   #25
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
может всё-таки проще будет залить весь файл во временную табличку и потом запросом вычистить её же от тех записей которые в любом случае не попадут в основную таблицу. А оставшиеся уже дописать\перезаписать в основную
Времени совсем мало, буду благодарен за пример реализации. Я об этом тоже думал.
Kerby666 вне форума Ответить с цитированием
Старый 12.08.2013, 14:29   #26
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Подкиньте пожалуйста пример проверки перед вставкой записи по полю KOD.
Дак я же выше примерный пример привел
Цитата:
залить весь файл во временную табличку
Отличная идея. Поддерживаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2013, 14:45   #27
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Код:
if not locate('KOD',+F) then
ругается на эту строку
Kerby666 вне форума Ответить с цитированием
Старый 12.08.2013, 14:56   #28
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
гается на эту строку
Скажи, что бы ты сделал если бы тебе задали вопрос:"Как приготовить?"
Или ты думаешь что тут телепаты?
Извини конечно, но твоя фраза "ругается на эту строку " говорит только о том что что-то не так, и код дает ошибку. К твоему сведению не существует одной универсальной ошибки на все случаи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2013, 15:02   #29
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Код:
if not DataModule4.LiteTable1.Locate('KOD',F,[]) then
Сделал так, теперь ошибка - примерный перевод рядом с Table : ошибка

Цитата:
Сообщение от Stilet Посмотреть сообщение
Скажи, что бы ты сделал если бы тебе задали вопрос:"Как приготовить?"
Или ты думаешь что тут телепаты?
Извини конечно, но твоя фраза "ругается на эту строку " говорит только о том что что-то не так, и код дает ошибку. К твоему сведению не существует одной универсальной ошибки на все случаи.
Да-да, каюсь, синтаксис там неверный был.

Вот код, который у меня получился.
Код:
procedure TBaseForm.Button2Click(Sender: TObject);
var list:TStringList;
    J, K, G, H, F, s:String;
    i, p:Integer;
begin
    List:=TStringList.Create;
    List.LoadFromFile('C:\k.txt');
    DataModule4.LiteQuery1.Active:=False;
    DataModule4.LiteQuery1.SQL.Text:='select KOD from Table';
    DataModule4.LiteQuery1.Active:=TRUE;
        with DataModule4.LiteQuery1 do begin
                  For i:=1 to List.Count -1 do  begin

    s:=List.Strings[i];// Тут присваиваю переменным часть строки от начала до ;
    p:=Pos(';',s);
    F := Copy(S, 1, p - 1);

    S := Copy(S, p + 1, Length(S));
    p:= Pos(';',s);
    G := Copy(S, 1, p - 1);

    S := Copy(S, p + 1, Length(S));
    p:= Pos(';',s);
    H := Copy(S, 1, p - 1);

    S := Copy(S, p + 1, Length(S));
    p:= Pos(';',s);
    J := Copy(S, 1, p - 1);

    S := Copy(S, p + 1, Length(S));
    p:= Pos(';',s);
    K := Copy(S, 1, p - 1);

  if not DataModule4.LiteTable1.Locate('KOD',F,[]) then
    begin

    DataModule4.LiteTable1.Insert;
    DataModule4.LiteTable1.FieldByName('KOD').AsString:=F;
    DataModule4.LiteTable1.FieldByName('Type').AsString:=G;
    DataModule4.LiteTable1.FieldByName('Name').AsString:=H;
    DataModule4.LiteTable1.FieldByName('Quantity').AsString:=K;
    DataModule4.LiteTable1.Post;
    end
    else ShowMessage('Запись уже существует');
    end;
     end;
        LAbel1.Caption:=IntToStr(i);
   end;

Последний раз редактировалось Stilet; 12.08.2013 в 15:21.
Kerby666 вне форума Ответить с цитированием
Старый 12.08.2013, 15:22   #30
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-о-о-о-т!
Теперь идея уловлена правильно.
Только один момент разве что еще посоветую: DataModule4.LiteTable1.Post; вынеси за пределы цикла. Прога должна быстрее отрабатывать.
Ну и в ShowMessage('Запись уже существует'); я бы не поленился либо дописать какая именно запись либо писал бы это в ЛОГ файл, либо вообще бы не писал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избежать циклической формулы? KJ_ya Microsoft Office Excel 4 27.01.2013 22:22
Как избежать излишнего использования :: invector Помощь студентам 2 28.09.2011 14:54
как избежать подвисания Juffin Общие вопросы Delphi 12 18.05.2011 23:41
Как избежать Selection? Мультипликатор Microsoft Office Word 10 21.06.2010 17:15
как избежать кэширования в Опере rolling PHP 3 01.12.2009 18:34