Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

Перенос данных с *.dbf в *.fdb   Найти похожие ветки 

 
viktor   (2004-07-25 22:52) [0]

Здравствуйте Мастера! Никак не могу решить такой вопрос.
Для перноса даннх с  *.dbf в базу FireBird 1.5 использую следующий код:

Table1.First;
while not Table1.Eof do
 begin
  Label18.Caption:="Абонент - "+DosToWin(Table1FIO.Value);
  Label33.Caption:=IntToStr(Table1.RecNo);
  prbVdk.StepBy(1);
  InsertSubs(Table1);
  Table1.Next;
  Application.ProcessMessages;
end;

Table1 - файл таблицы *.dbf.
DosToWin - функция перекодировки(понятно из чего куда)
InsertSubs - функция переноса, имеет такой вид:

function TfSubsForm.InsertSubs(Tabl:TTable):boolean;
begin
try
 Result:=True;
 with  SP do
  begin
    StoredProcName:="SUBS_TEMP_I";
    Prepare;
    ParamByName("PARTNER_F").AsInteger:=AbonentSubs.PARTNER_F;
    ParamByName("FIO").AsString:=DosToWin(Tabl.Fields[0].AsString);
    ParamByName("ID_RAJ").AsString:=Tabl.Fields[1].AsString;
    ParamByName("CAT_V").AsString:=DosToWin(Tabl.Fields[4].AsString);
    ParamByName("VUL_COD").AsInteger:=StrToInt(Tabl.Fields[5].AsString);
    ParamByName("NAME_V").AsString:=DosToWin(Tabl.Fields[6].AsString);
    ParamByName("BLD").AsString:=DosToWin(Tabl.Fields[7].AsString);
    ParamByName("KORP").AsString:=DosToWin(Tabl.Fields[8].AsString);
    if  Tabl.Fields[9].AsString="0" then ParamByName("KVART").AsString:=""
    else ParamByName("KVART").AsString:=Tabl.Fields[9].AsString;
    if Tabl.Fields[10].AsString="" then ParamByName("NO_ABON").AsInteger:=0
     else if not CheckIndex(Tabl.Fields[10].AsString) then
            ParamByName("NO_ABON").AsInteger:=0
           else ParamByName("NO_ABON").AsInteger:=StrToInt(Tabl.Fields[10].AsString);
    ParamByName("NUMB").AsString:=Tabl.Fields[11].AsString;
    ParamByName("DAT1").AsDate:=Tabl.Fields[12].AsDateTime;
    ParamByName("DAT2").AsDate:=Tabl.Fields[13].AsDateTime;
    ParamByName("NM_PAY").AsCurrency:=Tabl.Fields[14].AsCurrency;
    ParamByName("P1").AsCurrency:=Tabl.Fields[15].AsCurrency;
    ParamByName("P2").AsCurrency:=Tabl.Fields[16].AsCurrency;
    ParamByName("P3").AsCurrency:=Tabl.Fields[17].AsCurrency;
    ParamByName("P4").AsCurrency:=Tabl.Fields[18].AsCurrency;
    ParamByName("P5").AsCurrency:=Tabl.Fields[19].AsCurrency;
    ParamByName("P6").AsCurrency:=Tabl.Fields[20].AsCurrency;
    ParamByName("P7").AsCurrency:=Tabl.Fields[21].AsCurrency;
    ParamByName("P8").AsCurrency:=Tabl.Fields[22].AsCurrency;
    ParamByName("SM1").AsCurrency:=Tabl.Fields[23].AsCurrency;
    ParamByName("SM2").AsCurrency:=Tabl.Fields[24].AsCurrency;
    ParamByName("SM3").AsCurrency:=Tabl.Fields[25].AsCurrency;
    ParamByName("SM4").AsCurrency:=Tabl.Fields[26].AsCurrency;
    ParamByName("SM5").AsCurrency:=Tabl.Fields[27].AsCurrency;
    ParamByName("SM6").AsCurrency:=Tabl.Fields[28].AsCurrency;
    ParamByName("SM7").AsCurrency:=Tabl.Fields[29].AsCurrency;
    ParamByName("SM8").AsCurrency:=Tabl.Fields[30].AsCurrency;
    ParamByName("SB1").AsCurrency:=Tabl.Fields[31].AsCurrency;
    ParamByName("SB2").AsCurrency:=Tabl.Fields[32].AsCurrency;
    ParamByName("SB3").AsCurrency:=Tabl.Fields[33].AsCurrency;
    ParamByName("SB4").AsCurrency:=Tabl.Fields[34].AsCurrency;
    ParamByName("SB5").AsCurrency:=Tabl.Fields[35].AsCurrency;
    ParamByName("SB6").AsCurrency:=Tabl.Fields[36].AsCurrency;
    ParamByName("SB7").AsCurrency:=Tabl.Fields[37].AsCurrency;
    ParamByName("SB8").AsCurrency:=Tabl.Fields[38].AsCurrency;
    ParamByName("OB1").AsCurrency:=Tabl.Fields[39].AsCurrency;
    ParamByName("OB2").AsCurrency:=Tabl.Fields[40].AsCurrency;
    ParamByName("OB3").AsCurrency:=Tabl.Fields[41].AsCurrency;
    ParamByName("OB4").AsCurrency:=Tabl.Fields[42].AsCurrency;
    ParamByName("OB5").AsCurrency:=Tabl.Fields[43].AsCurrency;
    ParamByName("OB6").AsCurrency:=Tabl.Fields[44].AsCurrency;
    ParamByName("OB7").AsCurrency:=Tabl.Fields[45].AsCurrency;
    ParamByName("OB8").AsCurrency:=Tabl.Fields[46].AsCurrency;
    ParamByName("SUMMA").AsCurrency:=Tabl.Fields[47].AsCurrency;
    ParamByName("NUMM").AsFloat:=Tabl.Fields[48].AsFloat;
    ParamByName("SUBS").AsCurrency:=Tabl.Fields[49].AsCurrency;
    ParamByName("KVT").AsFloat:=Tabl.Fields[50].AsFloat;
    ExecProc;
    close;
 end;
except
 Result:=False;
end;
end;

Так вот, на моем ПК перекодировка работает нормально, а на ПК
клиента выскакивают крякозябры. Подскажите пожалуста в чем дело?


 
Anatoly Podgoretsky ©   (2004-07-25 22:55) [1]

Ошибка в DosToWin


 
viktor   (2004-07-25 23:01) [2]

Хорошо вот она:

function  DosToWin(DString :String) :String;
const
AltTable : Array[0..255] of Char = (
 #0,  #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, #35, #36, #37, #38, #39,
 #40, #41, #42, #43, #44, #45, #46, #47,
 #48, #49, #50, #51, #52, #53, #54, #55,
 #56, #57, #58, #59, #60, #61, #62, #63,
 #64, #65, #66, #67, #68, #69, #70, #71,
 #72, #73, #74, #75, #76, #77, #78, #79,
 #80, #81, #82, #83, #84, #85, #86, #87,
 #88, #89, #90, #91, #92, #93, #94, #95,
 #96, "a", "b", "c", "d", "e", "f", "g",
 "h", "i", "j", "k", "l", "m", "n", "o",
 "p", "q", "r", "s", "t", "u", "v", "w",
 "x", "y", "z",#123,#124,#125,#126,#127,
 "А", "Б", "В", "Г", "Д", "Е", "Ж", "З",
 "И", "Й", "К", "Л", "М", "Н", "О", "П",
 "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч",
 "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я",
 "а", "б", "в", "г", "д", "е", "ж", "з",
 "и", "й", "к", "л", "м", "н", "о", "п",
#176,#177,#178,#179,#180,#181,#182,#183,
#184,#185,#186,#187,#188,#189,#190,#191,
#192,#193,#194,#195,#196,#197,#198,#199,
#200,#201,#202,#203,#204,#205,#206,#207,
#208,#209,#210,#211,#212,#213,#214,#215,
#216,#217,#218,#219,#220,#221,#222,#223,
 "р", "с", "т", "у", "ф", "х", "ц", "ч",
 "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я",
 "Ё", "ё","Є","є","Ї","ї",#246,#247,
#248,#249,#250,#251,#252,#253,#254,#255);
var
  I : Integer;
begin
 Result := DString;
 for I := 1 to Length(DString) do Result[I] := AltTable[Byte(DString[I])];
end;


 
Anatoly Podgoretsky ©   (2004-07-25 23:09) [3]

В таком случае, дело в таблицах, исходная не 866 или несоответствующая настрока движка. А может даже смешнее, неверно спроектированые формы вывода.


 
viktor   (2004-07-25 23:16) [4]

Да, но почему у меня работает?


 
Anatoly Podgoretsky ©   (2004-07-25 23:25) [5]

А у тебя другие настройки или другая локализация системы.


 
viktor   (2004-07-25 23:34) [6]

Хорошо, может быть я неправильно объяснил ситуацию.
У клиента 2 ПК: на одном сервер, на втором клиент. На сервере, тоже стоит клиентская программа -  все работает нормально, а вот на клиенте - бяка. Причем и в базу влетают кряки. Я работаю под ХР, сервер тоже под ХР, а клиент под 98?


 
Fay ©   (2004-07-26 02:29) [7]

2viktor   (25.07.04 23:01) [2]
Кака минимум половина значений массива лишняя. А именно первая. 8)


 
Anatoly Podgoretsky ©   (2004-07-26 09:43) [8]

Fay ©   (26.07.04 02:29) [7]
Не лишняя, она для единства, упрощения и скорости, делать полтаблицы не рационально, выигрыш в 128 байт, частично съедается кодом по анализу и преобрахованию индекса, а скорость и понятность падают существенно.


 
ЮЮ ©   (2004-07-26 09:49) [9]

Убрать DosToWin и настроить БДЕ так, чтобы таблица на клиенте воспринималась правильно


 
Fay ©   (2004-07-26 09:52) [10]

2Anatoly Podgoretsky ©   (26.07.04 09:43) [8]
Т.е. Вы хотите сказать, что сравнение x > 127 займёт больше времени чем чтение из массива?


 
sniknik ©   (2004-07-26 09:54) [11]

два вопроса
1 нафига эта функция если есть стандартные в системе?
2 как думаеш что будет на выходе если в функцию попадет уже прреобразованое значение? у тебя же безусловное преобразование. а вот начальное зависит от некоторых причин. см. настройки BDE.

> Т.е. Вы хотите сказать, что сравнение x > 127 займёт больше времени чем чтение из массива?
сравнение не одно а на каждый символ, конечно дольше и намного.


 
Fay ©   (2004-07-26 10:04) [12]

А чтение, часом, не каждого?


 
Fay ©   (2004-07-26 10:20) [13]

Я проверял. Ваш более быстрый способ медленнее, по крайней мере, в 1.5 раза. Это как считается - быстрее, что-ли?


 
Fay ©   (2004-07-26 10:49) [14]

Про крайние меры - это я тормознул. 8)
В текстах, содержащих только "русские буквы", проверка выигрыша (и проигрыша) не даёт.


 
DSKalugin ©   (2004-07-26 18:46) [15]

а DataPump-ом не хочешь воспользоваться?
А потом скриптом типа
insert into ...
select ... from ...

загнать в нужную таблицу


 
viktor   (2004-07-26 22:27) [16]

sniknik ©   (26.07.04 09:54) [11]
Вы оказались правы. В ВДЕ DBASE настройка у меня ANSI, а у клиента
cp866. Как только поменял - все стало работать нормально. По поводу
DosToWin - у меня не только русские но и украинские символы встречаются, кроме того возможен вариант с символами до 127.
А так всем спасибо. Я просмотрел все, что касалось данной темы. Вопрос оказался достаточно популярный, но ответ нашелся только здесь. Еще раз всем спасибо!!!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.033 c
1-1091605973
Молодой
2004-08-04 11:52
2004.08.22
Почему UpperCase не работает с кирилицой и чем её модно заменить?


8-1086464611
SniZ
2004-06-05 23:43
2004.08.22
Получение снимка экрана и сохранение его в JPG


1-1091963555
GuAV
2004-08-08 15:12
2004.08.22
Хранение параметров приложения


3-1090920985
ONIK
2004-07-27 13:36
2004.08.22
Help!!! Динамическое создание БД ??????


14-1091539354
Алхимик
2004-08-03 17:22
2004.08.22
про Warning





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский