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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2010, 13:50   #11
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

вот и вопрос, что делать???...
потому что мне надо чтоб были буковки

через exel окрывается как надо (ну и когда CPCONVERT (866,1251, .. использую).

а через foxpro 2.5b - <>,,,
Ks2010 вне форума Ответить с цитированием
Старый 11.08.2010, 14:11   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В Фоксе набери команду:
Код:
REPLACE ALL  vessel WITH CPCONVERT(866,1251,vessel)
И сохрани таблицу
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 15:35   #13
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

проблема в том, что таких таблиц много, делаю их не я. (и база пополняется, не могу сказать точно какая будет к.с.)

и когда люди будут пользоваться программой, которую я пишу, у них будут возникать такие же проблемы (что появляются вместо букв непонятные символы). они точно не смогут зайти в fox и изменить к.с.

поэтому мне надо это сделать какую-то кнопочку чтоб по её нажатию менялась к.с. (причем просто корректного отображение мне не достаточно - которое достигается с помощью cpconvert ).
Ks2010 вне форума Ответить с цитированием
Старый 11.08.2010, 16:02   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

все подобные случаи делятся на две категории, когда можно править исходный файл и когда это делать нельзя.

если можно - то тогда попробуйте через патч кодовой таблицы.
К слову, а что, в поле VESSEL реально должен быть текст ЛЫДД ? Если да - то Ваш DBF файл банально кривой - в заголовке стоит кодовая страница 1251, а реально текст в DOS кодировке...

изменённая таблица в аттаче.

ну и программка на Delphi тоже в аттаче.
(p.s. программку писал в своё время (давно) "на коленке", сейчас бы я сделал это через TFileStream, захотите - переделаете сами, будут трудности - обращайтесь. Хотя, это тоже рабочий вариант)
Вложения
Тип файла: rar llyd02_1.rar (14.6 Кб, 11 просмотров)
Тип файла: rar cp65.rar (22.0 Кб, 11 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2010, 11:07   #15
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

да, там должно быть ЛЫДД.

в файле, который Вы мне прислали переключается кодовая страница вот так:
Код:
Var
 dbf: file of byte;
 CP: byte;
begin
ADOQuery1.Close;
AssignFile(dbf, 'c:\delphi7\kalmsql\llyd02_1.DBF');
Reset(dbf);
Seek(dbf, 29);
CP := $С9;
Write(dbf, CP);
CloseFile(dbf);
ADOQuery1.Open;
end;
все нормально!!

сделала так
Код:
procedure TForm2.Button1Click(Sender: TObject);
Var
 dbf: file of byte;
 CP: byte;
 Table_Name: string;
begin
ADOQuery1.Close;
Table_Name:= Form1.OpenDialog1.FileName;
AssignFile(DBF, Table_Name );
Reset(DBF);
Seek(DBF, 29);
CP := $65;
Write(DBF, CP);
CloseFile(DBF);
ADOQuery1.Open;
end;
меняет ср на 866 (причем не по нажатию на кнопку Button1 а когда запускаю программу.... ну или в момент OpenDialog1.Execute не знаю точно... ), а если пишу CP := $С9; обратно на 1251 не меняет....

Последний раз редактировалось Stilet; 12.08.2010 в 11:41.
Ks2010 вне форума Ответить с цитированием
Старый 12.08.2010, 11:23   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
меняет ср на 866, а если пишу CP := $С9; обратно на 1251 не меняет....
честно говоря, не понял, что теперь не так?
Проблема, как я понимаю, не решена?
А зачем Вам менять кодировку на 1251 ?!!
Это ведь неверно, в файле должна быть кодировка 866!
или я чего-то не понимаю?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2010, 11:39   #17
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

не, эт я чего-то не понимаю!! =)

нормально все меняет ср (на 866), и когда OpenDialog.FileName спользую,
но изменения применяются только когда я выхожу из приложения и заново его запускаю.

что мне где надо refresh??

что такого происходит при закрытии программы, что позволяет обновлять таблицу, чего нельзя вызвать программно???

Последний раз редактировалось Ks2010; 12.08.2010 в 13:46.
Ks2010 вне форума Ответить с цитированием
Старый 12.08.2010, 14:06   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

давайте пример программки (простой тестовой - сделайте отдельной простое приложение, не использующее ничего лишнего), которая не работает!
(запакуйте исходники в архив и выложите сюда).
посмотрим...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2010, 15:45   #19
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

лучше так нипишу,
если не нажимать на кнопку
Код:
procedure TForm1.Button12Click(Sender: TObject);
var ready:string;
begin
q:=0;
Form2.ADOQuery1.Filtered:=false;
Form2.Edit1.Text:='';
Form2.Edit2.Text:='';
if Edit1.Text='' then
    begin
    messageDlg('таблица не выбрана', mtError, [mbOK], 0);
    exit;
    end;
Form2.ADOTable1.Active:=true;
ready:= ChangeFileExt(ExtractFileName(Form2.ADOTable1.TableName), '');
Form2.Label1.Caption:='открыта таблицa '+ ready;
Form2.Caption:='открыта таблицa '+ ready;
Form2.DBGrid1.DataSource:=Form2.DataSource2;
Form2.ADOQuery1.SQL.Text:='select * from ' + ready ;
Form2.ADOQuery1.Open;
Form2.Show;
Form2.Label2.Caption:='количество строк  -  '+ inttostr(Form2.DBGrid1.DataSource.DataSet.RecordCount);
Form2.Edit2.Text:= inttostr(Form2.DBGrid1.DataSource.DataSet.RecordCount);
Form2.ADOQuery1.Append;
end;
к.с. заменяется во время работы программы, а если нажму, то только после перезапуска.

конечно, я что здесь открыла, то и закрыла потом
Код:
procedure TForm1.SelButton3Click(Sender: TObject);
Var
 dbf: file of byte;
 CP: byte;
begin
if Edit1.Text='' then
    begin
    messageDlg('òàáëèöà íå âûáðàíà', mtError, [mbOK], 0);
    exit;
    end;
Form2.ADOQuery1.Filtered:=false;
ADOQuery1.Close;
AssignFile(dbf, Form1.OpenDialog1.FileName);
Reset(dbf);
Seek(dbf, 29);
CP := $65;
Write(dbf, CP);
CloseFile(dbf);
Form2.Close;

Form2.ADOTable1.Active:=false;
ready:='';
Form2.Label1.Caption:='';
Form2.Caption:='';
Form2.DBGrid1.DataSource.DataSet.Close;
Form2.ADOQuery1.SQL.Text:='' ;
Form2.ADOQuery1.Close;
Form2.Close;
Form2.CloseQuery;
Form2.Label2.Caption:='';
Form2.Edit2.Text:= '';
Form1.Button4.Perform(WM_LBUTTONDOWN, 0, 0);
Form1.Button4.Perform(WM_LBUTTONUP, 0, 0);
end;

Последний раз редактировалось Ks2010; 12.08.2010 в 15:51.
Ks2010 вне форума Ответить с цитированием
Старый 13.08.2010, 11:33   #20
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

я поставила в ADOCjnnection1. KeepConnection:=false;
и всё хорошо!!!!
всем спасибо большое!!!
Ks2010 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чужое MDE приложение при формировании отчёта(экспорта) создаёт DBF с проставленной кодовой страницей 0x26 Serge_Bliznykov Microsoft Office Access 5 17.01.2011 17:26
Динамическое изменение URL страницы в JavaScript без перезагрузки страницы ilusha JavaScript, Ajax 7 25.02.2009 09:59
Изменение пути к таблице .dbf Tanuska___:) БД в Delphi 16 22.04.2008 15:52
Проблема кодировки DBF из foxpro djinni БД в Delphi 6 29.01.2008 14:36
сохранение результата выборки из DBF файла в DBF файл с такой же структурой таблицы GazimagomedovM БД в Delphi 5 06.11.2007 17:58