Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#211: 2008-08-16 22:16:55 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2022-04-02 23:57:09
карма: 0

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#212: 2008-08-16 22:28:10 ЛС | профиль | цитата
Андрюха писал(а):
Не работает

Твоя схема нормально читает Elements.db и без конвертора. Можешь ли ты приложить именно ту базу (с UTF-8), и именно с тем сравнением, которое тебе необходимо
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#213: 2008-08-16 22:44:01 ЛС | профиль | цитата
nesco писал(а):
Можешь ли ты приложить именно ту базу (с UTF-8), и именно с тем сравнением
Андрюха, давай не стесняйся. IC не моё, помоему tsdima
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#214: 2008-08-16 23:00:29 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2022-04-02 23:57:09
карма: 0

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#215: 2008-08-16 23:59:57 ЛС | профиль | цитата
Детальное рассмотрение показало...
Короче, на этот IC можно забить -- не будет он работать с UTF-8, он рассчитан только на ASCII

------------ Дoбавленo:


Вот тебе пример, который может делать запрос Upper c UTF-8 (среднее поле Edit), в нем есть переделанный IC


Add(MainForm,16668706,343,147)
{
Left=20
Top=105
Width=575
Height=440
Point(onClose)
link(onCreate,7134383:doOpen,[])
link(onClose,7134383:doClose,[])
}
Add(SQLite_DB,7134383,406,161)
{
FileName="test.db"
link(onOpen,11929758:doEvent1,[(457,167)(457,342)])
link(onError,15899502:doWork1,[(655,174)])
}
Add(SQLite_Exec,14862701,560,336)
{
SQL="select * from fio;"
link(onError,7971196:doExec,[])
link(dbHandle,12317758:Var3,[(566,324)])
}
Add(Message,8822109,672,336)
{
}
Add(ChildPanelEx,3911616,343,336)
{
link(onEventData,430754:doWork1,[])
}
BEGIN_SDK
Add(EditMultiEx,7294489,21,21)
{
EventCount=#11:onEventData|
Width=321
Height=312
}
Add(Panel,1320748,98,294)
{
Width=567
Height=91
Align=2
}
Add(Button,2510032,49,91)
{
Left=5
Top=5
Caption="ALL"
link(onClick,3797737:doData,[])
}
Add(Button,3648128,98,161)
{
Left=5
Top=35
Caption="Find RU"
link(onClick,10557716:doData,[])
}
Add(Edit,15272826,189,112)
{
Left=70
Top=32
Width=455
Height=25
Text="SELECT * FROM fio WHERE upper(f) LIKE 'ИВА%';"
}
Add(Edit,15694199,98,49)
{
Left=70
Top=4
Width=455
Height=25
Text="SELECT f,i,o FROM fio;"
}
Add(DoData,10557716,189,161)
{
link(onEventData,4239470:doCharset,[])
link(Data,15272826:Text,[])
}
Add(DoData,3797737,98,91)
{
link(onEventData,5780134:doWork2,[(208,97)(208,27)])
link(Data,15694199:Text,[])
}
Add(HubEx,5780134,315,14)
{
link(onEvent,7294489:onEventData,[])
}
Add(Button,11951259,98,259)
{
Left=5
Top=65
Caption="Find EN"
link(onClick,3186870:doData,[])
}
Add(Edit,935612,147,210)
{
Left=70
Top=62
Width=455
Height=25
Text="SELECT * FROM fio WHERE f LIKE'pet%';"
}
Add(DoData,3186870,147,259)
{
link(onEventData,5871420:doWork3,[(305,265)])
link(Data,935612:Text,[])
}
Add(HubEx,5871420,301,154)
{
link(onEvent,5780134:doWork3,[(319,167)])
}
Add(Charset,4239470,245,161)
{
Type=6
link(onCharset,5871420:doWork2,[])
}
END_SDK
Add(ChildPanel,430754,413,336)
{
link(Data1,10169931:Var2,[])
}
BEGIN_SDK
Add(EditMulti,1352360,21,21)
{
WorkCount=1
DataCount=1
Width=370
Height=228
link(doWork1,5067575:doEvent1,[(35,27)])
}
Add(Panel,15980865,35,126)
{
Top=91
Width=567
Height=315
Align=5
}
Add(StringTable,5965887,336,98)
{
Left=5
Top=5
Width=555
Height=310
Columns=#5:F=175|5:I=175|5:O=175|
}
Add(SQLite_Query,3828135,126,126)
{
link(onQuery,5409173:doStr,[])
link(dbHandle,1352360:Data1,[(132,74)(27,74)])
}
Add(MT_String,5409173,182,126)
{
link(onResult,12864531:doCharset,[])
}
Add(Hub,5067575,35,63)
{
link(onEvent1,5965887:doClear,[(156,69)(156,111)])
link(onEvent2,3828135:doQuery,[(97,76)(97,132)])
}
Add(Charset,12864531,259,126)
{
Type=7
link(onCharset,5965887:doAdd,[(313,132)(313,104)])
}
END_SDK
Add(GetDataEx,10169931,406,315)
{
Angle=3
link(Data,15830060:Var2,[(412,324)])
}
Add(HubEx,15899502,651,329)
{
link(onEvent,8822109:doMessage,[])
}
Add(SQLite_Exec,7971196,609,336)
{
SQL="BEGIN TRANSACTION;\n\rCREATE TABLE fio (f VARCHAR(50), i VARCHAR(20), o VARCHAR(30));\n\rINSERT INTO "fio" VALUES('иванов', 'иван', 'иванович');\n\rINSERT INTO "fio" VALUES('петров', 'семен', 'сергеевич');\n\rINSERT INTO "fio" VALUES('сидоров', 'иван', 'сергеевич');\n\rINSERT INTO "fio" VALUES('иванов', 'семен', 'петрович');\n\rINSERT INTO "fio" VALUES('петряев', 'ванес', 'сезганович');\n\rINSERT INTO "fio" VALUES('ivanov', 'jvan', 'ivanovich');\n\rINSERT INTO "fio" VALUES('petrov', 'semen', 'sergeevich');\n\rINSERT INTO "fio" VALUES('sidorov', 'ivan', 'sergeevich');\n\rINSERT INTO "fio" VALUES('ivanov', 'semen', 'petrovich');\n\rINSERT INTO "fio" VALUES('petryaev', 'vanes', 'sezganovich');\n\rCOMMIT;"
link(onError,15899502:doWork2,[])
link(dbHandle,10169931:Var1,[(615,307)(419,307)])
}
Add(SQLite_Exec,2725749,525,399)
{
SQL="PRAGMA encoding;"
link(onError,15899502:doWork3,[(655,405)])
link(dbHandle,12317758:Var2,[])
}
Add(Hub,11929758,469,336)
{
OutCount=3
link(onEvent1,11222037:addFunction,[(513,342)(513,244)])
link(onEvent2,2725749:doExec,[(513,349)(513,405)])
link(onEvent3,14862701:doExec,[(531,356)(531,342)])
}
Add(GetDataEx,12317758,518,315)
{
Angle=3
link(Data,10169931:Var3,[])
}
Add(InlineCode,11222037,525,238)
{
WorkPoints=#11:addFunction|
DataPoints=#8:dbHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|52:uses kol,Share,Debug,Windows,SQLite3Api,hiSQLite_DB;|0:|5:const|67: CP_THREAD_ACP = 3; // current thread's ANSI code page|53: CP_UTF8 = 65001; // UTF-8 translation|53: CP_KOI8 = 20866; // KOI-8 translation|53: CP_DOS = 866; // DOS translation|53: CP_WIN = 1251; // WIN translation|0:|4:type|28: THiAsmClass = class(TDebug)|9: public|22: dbHandle:THI_Event;|52: procedure addFunction(var _Data:TData; idx:word);|5: end;|0:|14:implementation|0:|65:procedure myFunc(ctx:pointer; nArg:integer; args:ppvalue); cdecl;|20:var s,sstr:string;|22: buffer: Pointer;|22: BufLen: integer;|5:begin|32: s:=sqlite3_value_text(args^);|14: sstr := '';|64: BufLen := MultiByteToWideChar(CP_UTF8, 0, @s[1], -1, nil, 0);|27: if BufLen < 1 then exit;|28: GetMem(buffer, 2*BufLen);|62: MultiByteToWideChar(CP_UTF8, 0, @s[1], -1, buffer, BufLen);|30: CharUpperW(PWChar(buffer));|68: BufLen := WideCharToMultiByte(CP_UTF8,0,buffer,-1,nil,0,nil,nil);|27: if BufLen > 1 then begin|31: SetLength(sstr,BufLen-1);|71: WideCharToMultiByte(CP_UTF8,0,buffer,-1,@sstr[1],BufLen,nil,nil);|7: end;|19: FreeMem(buffer);|55: sqlite3_result_text(ctx,PChar(sstr),Length(sstr),0);|4:end;|0:|34:procedure THiAsmClass.addFunction;|13:var dt:TData;|5:begin|37: dt := ReadData(_Data,dbHandle,nil);|41: if _IsObject(dt,SQLite_GUID) then begin|90: sqlite3_create_function(ToObject(dt),PChar('UPPER'),1,SQLITE_ANY,nil,@myFunc,nil,nil);|6: end;|4:end;|0:|4:end.|
link(dbHandle,15830060:Var3,[(531,212)])
}
Add(GetDataEx,15830060,399,203)
{
link(Data,7134383:dbHandle,[])
}

карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#216: 2008-08-17 02:03:55 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2022-04-02 23:57:09
карма: 0

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#217: 2008-08-17 02:30:53 ЛС | профиль | цитата
Смотря какие базы. Конечно, этот метод немного медленнее, чем предыдущий, но достаточно быстрый для большинства нужд.

Работает он просто -- преобразует стандартную строку с набором символов UTF-8 (MultiByte) в Wide строку (WideChar), затем преобразует Wide строку в верхний регистр и возвращает все это обратно в стандартную строку с набором символов UTF-8
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#218: 2008-08-17 03:23:55 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2022-04-02 23:56:47
карма: 0

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#219: 2008-08-17 03:25:20 ЛС | профиль | цитата
Андрюха писал(а):
можно работать с кодировками KOI8 и DOS

Нет, для них нужны другие конверторы
карма: 22

0
Ответов: 26
Рейтинг: 1
#220: 2008-08-20 17:24:08 ЛС | профиль | цитата
МОжет кто подскажет по SQL.
Есть таблица с набором данных.
Нужно организовать добавление новой строки таблицы. НО! Если строка с такими данными уже есть, то добавлять НЕНАДО, а надо вывести сообщение что данные уже есть в таблице. . Т.е. нужна проверка существования определенной записи в таблице БД.
карма: 0

0
Ответов: 5446
Рейтинг: 323
#221: 2008-08-20 21:38:41 ЛС | профиль | цитата
Сначала делаешь SELECT, потом - INSERT. В чём проблема-то?
карма: 1

0
Ответов: 26
Рейтинг: 1
#222: 2008-08-21 08:27:05 ЛС | профиль | цитата
SELECT выдает в поток если чтото в таблице найдено. Если строчки такой нет, то запрос ничего не возвращает вроде как. Вот в этом и проблема.
Нет события при ненахождении данных по оператору SELECT
Хорошобы SQL выражение или кусок схемы...
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#223: 2008-08-21 10:26:11 ЛС | профиль | цитата
Amig0 писал(а):
Нет события при ненахождении данных по оператору SELECT
нет события - тоже событие. Направляешь Select в Memory, предварительно записав в Memory пусто"", потом анализ Memory и если пусто, то Insert, а если нет, то нет.
правильно iarspider писал(а):
В чём проблема-то?

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#224: 2008-08-21 13:53:11 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2022-04-02 23:54:13
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#225: 2008-08-21 14:30:50 ЛС | профиль | цитата
Андрюха, затер чем ? Какой командой ?
------------ Дoбавленo:

Если удалил виндой - ищи в корзине
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)