Григорий Скок
77 сообщений
#16 лет назад
Здравствуйте все великие магистры кодинга) нужна помошь!
сталкнулся со следующей проблемой

делаю вставку записей в таблицу с условием через Query
....
.....
procedure TForm1.Action3Execute(Sender: TObject);
begin
//проверка введен ли период
if MaskEdit1.Text<>MaskEdit1.EditText then begin
ShowMessage('Не указан период!';
Exit;
end;
if MaskEdit2.Text<>MaskEdit2.EditText then begin
ShowMessage('Не указан период!';
Exit;
end;
// указываем путь к базе настроек в которой прописаны пути к файлам с базами из которых будем копирывать записи
mDBFTable1.TableName:=ExtractFilePath(Application.exename)+ 'Date\Path.dbf';
mDBFTable1.Open;
vip:=ExtractFilePath(Application.exename)+ 'Out\S_bppr_p.dbf'; // указываем путь к базе в которую будем вставлять записи
mDBFTable1.First; // переход на первую запись
While not mDBFTable1.eof do //делать цикл пока таблица не закончится
begin
put:=mDBFTable1.FieldByName('pathu'.AsString; // Записываем значение пути в переменную
user:=mDBFTable1.FieldByName('user'.AsString; // Записываем значение пользователя в переменную
viplat:=mDBFTable1.FieldByName('vipl'.AsString; // Записываем значение типа выплаты в переменную
//проверка если нет файла
if not FileExists(put+'s_bppr.dbf' then
begin
ShowMessage('Компьютер '+user+ ' не в сети или отсутствует файл '+put+'s_bppr.dbf';
mDBFTable1.Next;//переходим на следующую запись
end else
begin
// собственно запись и выполнение запроса на выбор записей по условию и вставка их в базу
Query1.SQL.Clear;
Query1.SQL.Add('insert into "'+vip+'" select * from "'+put+'s_bppr.dbf" where Info like "*'+Edit1.Text+'%" and datpol between "'+MaskEdit1.text+'" and "'+ MaskEdit2.text +'" ';
Query1.ExecSQL;
Query1.SQL.Clear;
mDBFTable1.Next;//переходим на следующую запись
end;
end;
mDBFTable1.Close;
end;
....
....
все работает только один раз, при повторе данной процедуры вставляются записи но вместо символов кирилицы везде вот такие вот решотки ################# ? как это исправить? обе таблицы DBF кодировка досовая 866

заранее всем откликнувшимся спасибо! если нужно могу выслать исходник
Максим М.
56 сообщений
#16 лет назад
Доброго времени суток! А может попробовать переписать без ExecSql а через AppendRecord.
Григорий Скок
77 сообщений
#16 лет назад
Цитата ("GeminiPro"):
Доброго времени суток! А может попробовать переписать без ExecSql а через AppendRecord.
можешь показать кусок кода с примером appendrecord ?
Александр А.
13 сообщений
#16 лет назад
Можно и без аппендрекорда обойтись.
Для начала попробовать параметризованный запрос.
Максим М.
56 сообщений
#16 лет назад
У AppendRecord простой синтаксис AppendRecord()
Николай М.
1895 сообщений
#16 лет назад
Какая версия делфи ?

На 7 нужен 2 апдейт ставить обьязательно, как подозреваю работаете через TTable)

вместо этой байди
Цитата:
"'+vip+'"

нужно писать
Цитата:
quotedstr(vip)


execsql можно применять на самом конекте, на Table )
вместо Application.exename нужно писать params(0), хотя у вас задействован Forms, но всетаки так более правильней

многовато mDBFTable1.Next; , здесь точно все ок? с таким форматированием кода его сложно понять

и юзайте query.params код станет намного понятней сразу)

Цитата:
//проверка введен ли период
if MaskEdit1.Text<>MaskEdit1.EditText then begin
ShowMessage('Не указан период!';
Exit;
end;
if MaskEdit2.Text<>MaskEdit2.EditText then begin
ShowMessage('Не указан период!';
Exit;
end;


это что за байда?
не проще писать так

 if (MaskEdit1.Text<>MaskEdit1.EditText) or (MaskEdit2.Text<>MaskEdit2.EditText) then    //проверяем все параметры
ShowMessage('Не указан период!');
else BEGIN

// параметри проверены, работаем

END;


в общем наведите марафет в коде... )
Григорий Скок
77 сообщений
#16 лет назад
Спасибо < MMM_Corp>
Григорий Скок
77 сообщений
#16 лет назад
Цитата ("MMM_Corp"):
Какая версия делфи ?

На 7 нужен 2 апдейт ставить обьязательно, как подозреваю работаете через TTable)

Версия 7.0
Чистка кода есть такое, но больше интересует собственно запись и выполнение запроса на выбор записей по условию и вставка их в базу
вот так все работает
Query1.SQL.Clear;
Query1.SQL.Add('insert into "'+vip+'" select * from "'+put+'s_bppr.dbf" where Info like "*'+Edit1.Text+'%" and datpol between "'+MaskEdit1.text+'" and "'+ MaskEdit2.text +'" ';
Query1.ExecSQL;
но при повторе запроса еще раз в базу вставляются решетки вместо кирилицы
Николай М.
1895 сообщений
#16 лет назад
Если с квери тянуть строки, то они норм. отображаются? Гдето между 1 и 2 заливкой инфи идёт дисконект/конект, настройка кодировки?
Григорий Скок
77 сообщений
#16 лет назад
Всем спасибо праблема решена