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

Вниз

Бдешный Upper( Я )<>Upper( я )   Найти похожие ветки 

 
Serginio   (2002-12-30 16:04) [0]

Проблема BDE в запросах и идексах. И таких вещей я насчитал около 10-15. Как с этим бороться. Для примера если у вас есть в поле Яблоко и вы напишите Select * From xx Where descr=Upper("яблоко"), то запрос ничего не найдет.


 
Delirium^.Tremens   (2002-12-30 16:07) [1]

Это пробовал?
http://delphi.mastak.ru/cgi-bin/forum.pl?n=1&look=1&id=1041164691&from=13


 
passm   (2002-12-30 16:09) [2]

Serginio (30.12.02 16:04)> Может, Select * From xx Where Upper(descr)=Upper("яблоко")


 
Delirium^.Tremens   (2002-12-30 16:09) [3]

P.S. Для случая DBASE - dBASE RUS cp866


 
Serginio   (2002-12-30 16:13) [4]

Стоит "ascii" ANSI. Попробую Pdox ANSI Cyrillic


 
Serginio   (2002-12-30 16:17) [5]

Для FoxPro тольк -> Langdriver "ascii" ANSI.
Еще какие предложения. Или такая ситуация только у меня???


 
Delirium^.Tremens   (2002-12-30 16:19) [6]


> Для FoxPro тольк -> Langdriver "ascii" ANSI.
> Еще какие предложения. Или такая ситуация только у меня???

dBASE RUS cp866


 
Alexander_K   (2002-12-30 16:22) [7]

А ты навсякий случай попробуй
Select * From xx Where Upper(descr)like Upper("яблоко")
или
Select * From xx Where Upper(descr) like Upper("%яблоко%")


 
Serginio   (2002-12-30 16:24) [8]

Работаю с 1С таблицами. Нужен Cirillic 1251.
И чтобы бдкшный Upper=AnsiUpperCase.


 
sniknik   (2002-12-30 16:25) [9]

Serginio (30.12.02 16:17)
> Или такая ситуация только у меня???

похоже, у меня полный список.
а если руками занести "dBASE RUS cp866"?

или DBASE используй только Lavel = 25 поставь, тоже фохпро.


 
passm   (2002-12-30 16:25) [10]

Serginio (30.12.02 16:04)> Пардон, снова я :)
Помимо кодировки есть вот еще что:
Select * From xx Where descr=Upper("яблоко")
descr="Яблоко"
В запросе: "Яблоко" = "ЯБЛОКО"
Т. о.:
Select * From xx Where Upper(descr)=Upper("яблоко")


 
Serginio   (2002-12-30 16:26) [11]

(Alexander_K) Спасибо просто ошибся- конечно использую как у тебя. Сейчас попробую вывести все несоответствия.


 
sniknik   (2002-12-30 16:27) [12]

упс.

Serginio (30.12.02 16:24)
> Работаю с 1С таблицами.
нормально их ODBC Driver Visual Foxpro открывает. лутше через ADO, наверное и с BDE получится проверь.


 
Serginio   (2002-12-30 16:49) [13]

Создал таблицу с полем ID типа сhar заполнил его от 1 до 255 добавил индекс "UPPER(ID)" и с помощью Check(DbiExtractKey(hCur,@buf,PChar(TempStr))); получил значение ключа. Вот какие не соответствия получились. С права стоит бдеешный Upper
AnsiUpperCase(ѓ)=Ѓ<>ѓ
AnsiUpperCase(ђ)=Ђ<>ђ
AnsiUpperCase(ќ)=Ќ<>ќ
AnsiUpperCase(ћ)=Ћ<>ћ
AnsiUpperCase(џ)=Џ<>џ
AnsiUpperCase(ў)=Ў<>ў
AnsiUpperCase(і)=І<>і
AnsiUpperCase(ґ)=Ґ<>ґ
AnsiUpperCase(ё)=Ё<>ё
AnsiUpperCase(є)=Є<>є
AnsiUpperCase(ј)=Ј<>ј
AnsiUpperCase(ѕ)=Ѕ<>ѕ
AnsiUpperCase(ї)=Ї<>ї
AnsiUpperCase(ч)=Ч<>ч
AnsiUpperCase(я)=Я<>џ


 
sniknik   (2002-12-30 17:59) [14]

Юлия сделай запрос вида
SELECT *, CHR(RecNo()+191) AS AddChar, RecNo()+191 AS NumChar FROM sc2222 //sc2222 - таблица из 1С
через ODBC Driver Visual Foxpro. удивишся //см. чтобы значение не перевалило через 255 не перевалило CHR ругатся будет.


 
Serginio   (2002-12-30 18:18) [15]

Не перевалило. Цикл от 1 То 255


 
sniknik   (2002-12-30 18:51) [16]

а драйвер тот? и видел откуда руские буквы начинаются?

1 ODBC Driver Visual Foxpro - 1С таблици открывает правильно с рускими буквами //независимо от установок
2 Microsoft.Jet.OLEDB.4.0; dBase IV; 1С таблици открывает правильно если убрать индексы, если стоит
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage = ANSI
3 BDE открывает 1С таблици с русскими если в BDE Administratore DBASE = ANCYRR


 
sniknik   (2002-12-30 18:54) [17]

DBASE.LangDriver сорру
"ascii" ANSI аналог ANCYRR


 
Serginio   (2003-01-05 14:57) [18]

Дело в том, что bdeшный Upper не правильно работает со всеми кодировками. И это касается
AnsiUpperCase(ч)=Ч<>ч Upper(ч)=ч
AnsiUpperCase(я)=Я<>џ Upper(я)=џ
И вообще это возможно вылечить


 
sniknik   (2003-01-05 17:45) [19]

вобщето это к базам не относится.

руская раскладка для разных кодировок разная, для ANSI (виндовс) начинается с #192-А и до #255-я (цыфры ничего не напоминают?). в дос с #128-А и дальше с разрывами.
перекодировка идет через драйвер / или не идет если драйвер "ascii" ANSI и кодовая страница соответсвующая.
...
ладно, хотел подробно описать, но кажется не смогу, долго. сразу резюме.
1 Если ты даеш символы в одной кодировке а UPPER делает для другой то попадаеш на символы псевдографики для которых нет значения UPPER.
2 BDE работает правильно.
3 вылечить нельзя, оно так живет. можно только правильно настроить.
4 выполни код
s:= "а";
Label1.Caption:= IntToStr(Ord(s[1]));
s:= AnsiUpperCase(s);
Label2.Caption:= IntToStr(Ord(s[1]));
s:= "я";
s1:= "Я";
if AnsiUpperCase(s) = s1 then Label3.Caption:= "Сошлось!"
else Label3.Caption:= "А пошли вы все!";

может и поймеш чего.


 
Serginio   (2003-01-05 18:19) [20]

Да это все понятно. Непонятно только почему
AnsiUpperCase(ч)<>Upper(ч)=ч
AnsiUpperCase(я)<>Upper(я)=џ

Поэтому в запросе
Select * From xx Where Upper(descr)=Upper("яблоко")
не будет ни чего найдено если descr=Яблоко

Еще раз для проверки.
Создана таблица с индексом IdxName=UPPER(ID)
procedure TForm1.Button8Click(Sender: TObject);
var
Buf:TIndexChar;
TempStr:String;
Props: CurProps;
j,i:Integer;
NewIndex: IDXDesc;
hCur:hDBICUR;

begin
check(DbiOpenTable(C1db,Pchar("UppInd.dbf"),Pchar(szFoxPro),Pchar("UppInd.CDX"),Pchar("IdxName"),0,dbiREADWrite,dbiOpenShared,xltNONE,True,nil,hCur));
dbiSetToBegin(Hcur);
Check(DbiGetCursorProps(hCur,Props));
SetLength(TempStr,Props.IkeySize);
StringGrid1.Cells[3,1]:=IntToStr(Props.IkeySize);
j:=1;
For i:=1 to 255 do
Begin
buf.Id:=Char(i);
Check(DbiExtractKey(hCur,@buf,PChar(TempStr)));
ArrStr:=Arrstr+","+IntToStr(Ord(TempStr[1]));
If AnsiUpperCase(Char(i))<>TempStr[1] Then
memo1.Lines.Add("AnsiUpperCase("+Char(i)+")="+AnsiUpperCase(Char(i))+"<>"+TempStr);
end;
dbiCloseCursor(hCur);
end;



 
Nil   (2003-01-05 18:30) [21]

Спасибо!


 
sniknik   (2003-01-05 18:43) [22]

а по моему ничего тебе не понятно
попытайся перечитать еще раз, про #192-А и #128-А (как думаеш равны?) и "перекодировка идет через драйвер".


 
sniknik   (2003-01-05 18:45) [23]

Nil © (05.01.03 18:30)
>Спасибо!

страннно. кому? за что? и от кого?


 
Serginio   (2003-01-05 18:52) [24]

Кроме ниже перечисленных (>128) равны
AnsiUpperCase(ѓ)=Ѓ<>ѓ
AnsiUpperCase(ђ)=Ђ<>ђ
AnsiUpperCase(ќ)=Ќ<>ќ
AnsiUpperCase(ћ)=Ћ<>ћ
AnsiUpperCase(џ)=Џ<>џ
AnsiUpperCase(ў)=Ў<>ў
AnsiUpperCase(і)=І<>і
AnsiUpperCase(ґ)=Ґ<>ґ
AnsiUpperCase(ё)=Ё<>ё
AnsiUpperCase(є)=Є<>є
AnsiUpperCase(ј)=Ј<>ј
AnsiUpperCase(ѕ)=Ѕ<>ѕ
AnsiUpperCase(ї)=Ї<>ї
AnsiUpperCase(ч)=Ч<>ч
AnsiUpperCase(я)=Я<>џ


 
sniknik   (2003-01-05 19:08) [25]

ну у тебя просто комп уникальный (как и ты сам)

вот сделал запрос, специально к 1С-ной таблице,
SELECT * FROM SC2222.DBF WHERE UPPER(DESCR)=UPPER("офис")
ленгдрайвер "ascii" ANSI
поверь работает правильно.
на случай вышеперечисленных
SELECT * FROM SC2222.DBF WHERE UPPER(DESCR)=UPPER("буХгаЛтери я")
тоже выбирает.
разбирайся. а я устал уже. :-((



 
Serginio   (2003-01-05 19:12) [26]

А теперь набери
SELECT * FROM SC2222.DBF WHERE UPPER(DESCR)=UPPER("буХгаЛтериЯ")


 
Serginio   (2003-01-05 19:16) [27]

Еще раз повторю
Upper(ё)<>Upper(Ё)
Upper(ч)<>Upper(Ч)
Upper(я)<>Upper(Я)


 
sniknik   (2003-01-05 19:31) [28]

ты непонятно обьясняеш :-((
поставь руками лангдрайвер
Pdox ANSI Cyrillic
будет работать


 
Serginio   (2003-01-05 19:36) [29]

У тебя получилось
SELECT * FROM SC2222.DBF WHERE UPPER(DESCR)=UPPER("буХгаЛтериЯ")???
А для FoxPro только "ascii" ANSI.
Этаже бяка и для DBase 866 проверено


 
sniknik   (2003-01-05 19:41) [30]

> У тебя получилось
да с Pdox ANSI Cyrillic

сделай запрос вида
SELECT DESCR,UPPER(DESCR) FROM SC2222.DBF
хорошо видно, все правильно.

> Этаже бяка и для DBase 866 проверено
(ну кодировки то разные всетаки)


 
sniknik   (2003-01-05 19:43) [31]

corry
Serginio (05.01.03 19:36)
> А для FoxPro только "ascii" ANSI.
рукуми,руками ставь, скопируй отсюда и ставь. Pdox ANSI Cyrillic


 
Serginio   (2003-01-05 19:47) [32]

> Этаже бяка и для DBase 866 проверено
(ну кодировки то разные всетаки)
Так база была в этой кодировке

Подскажи как для FoxPro поставить Pdox ANSI Cyrillic.
Для "ascii" ANSI запрос SELECT DESCR,UPPER(DESCR) FROM SC2222.DBF
выдает то что Я описывал выше




 
sniknik   (2003-01-05 20:02) [33]

можно програмно (если не получается руками :-)
var List : TStrings;
begin
Memo1.Lines:= List;
List.Add ("LANGDRIVER=cyrr");
Session.ModifyDriver("FOXPRO",List);
Session.ModifyDriver("DBASE",List); //на всякий случай
List.Free;
end;

будет действенно на одну сессию (если не сохраниш)


 
Serginio   (2003-01-05 20:05) [34]

руками скопировал Pdox ANSI Cyrillic.
Таже беда. Сейчас перезагружусь


 
sniknik   (2003-01-05 20:07) [35]

черт програмно чегото не получается. неправильное имя драйвера счас попробую найти.



 
Serginio   (2003-01-05 20:14) [36]

Перезагрузился таже беда. Именно на ч,ё,я.
Еще раз повторю таже беда была у меня когда таблицы были в кодировке dBASE RUS cp866.


 
sniknik   (2003-01-05 20:48) [37]

1С держит в 1251 (вроде)
описание из
D:\Program Files\Common Files\Borland Shared\BDE\BDE32.HLP
раздел
Language drivers
dBASE RUS cp866 DB866ru0 DOS CODE PAGE 866 dBASE Russian
...
Pdox ANSI Cyrillic ancyrr 1251 (ANSI) Compatible with Paradox "cyrr"
...
кстати совсем разные кодировки (Dos,Windows) ты ее в досе как видиш (в нортоне)? как абракадабру? или разборчивый текст?

у меня работает.
(правда почемуто програмно не задается, см. выше. буду разбиратся ancyrr ставил и cyrr одно*^%но)


 
Serginio   (2003-01-05 20:56) [38]

1С версии 7.5 в Dos кодировке dBASE RUS cp866 в 7.7 в 1251 (ANSI) .Значит это только у меня Upper(Я)<>Upper(я)???


 
sniknik   (2003-01-05 21:05) [39]

все класно и програмно выставляется
var List : TStrings;
begin
List:= TStringList.Create;
Memo1.Lines:= List;
List.Add ("LANGDRIVER=ancyrr");
Session.ModifyDriver("FOXPRO",List);
Session.ModifyDriver("DBASE",List);
List.Free;
end;
(сам был виноват, сначала читал значения в тот же лист и не ощищал вот он и оставался каким был. т.е при
List.Add ("LANGDRIVER=cyrr");
List.Add ("LANGDRIVER=ancyrr");
возьмет первое значение, или ошибка но не покажет и останется каким был установлен)

кстати откуда ты уверен что у тебя FOXPRO срабатывает? поставь на всякий пожарный и в DBASE то же значение, ну можно еще LEVEL поставить 25 (Use 25 for FoxPro. Default: 7).
может поэтому и мучаешся ставиш не там?


 
sniknik   (2003-01-05 21:11) [40]

Serginio (05.01.03 20:56)
не трудно с тобой. зачем повторяешся?

пришли мне таблицу с которой тестиш (только маленькую!), даже если у тебя кодировкадругая, подобрать можно. Видел сколько там разных? ->BDE32.HLP->Language drivers?



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

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

Наверх




Память: 0.53 MB
Время: 0.01 c
3-72065
Ich Hasse
2003-01-05 21:06
2003.01.23
Access


7-72544
Konstantin
2002-11-09 19:06
2003.01.23
Програмирование сканеров фирмы ICOM?


8-72414
UncleRu
2002-10-08 17:34
2003.01.23
Редактирование BMP


1-72356
Shodan
2003-01-12 19:17
2003.01.23
Цикл : пауза, продолжение


1-72290
Fly`
2003-01-15 10:57
2003.01.23
TabSheet в PageControle...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский