Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

не отрабатывается селект к базе((   Найти похожие ветки 

 
-=snoop=- ©   (2005-08-03 09:26) [0]

привет всем, кака-то проблема дурацкая(), есть база *.dbf в ней имеется поле code , которое содержит как русские так и латинские буквы, ситыауия в том, что когда запрос имеет вид

lADO2LoginPro.SQL.Add
              ("select * from login.pro where ltrim(rtrim(code)) = "+""""+"ffffff"+"""") ;
....

запрос отрабатывается, а если вот так


lADO2LoginPro.SQL.Add
              ("select * from login.pro where ltrim(rtrim(code)) like "+""""+"кимли"+"""") ;

то (inttostr(lADO2LoginPro.RecordCount)) возиращает значение 0, подскажите, как решить трабл??


 
Dell3r ©   (2005-08-03 09:37) [1]

Я что-то про + не понял. Зачем столько апострофов?


 
Johnmen ©   (2005-08-03 09:40) [2]

Читать LocalSQL.hlp на предмет изучения применения LIKE.


 
evvcom ©   (2005-08-03 09:42) [3]

А ты уверен, что в login.pro имеется строка с code="кимли"?
Обычно like используют, когда хотят найти записи содержащие данную строку, а не точно ей соответствуют.


 
Dell3r ©   (2005-08-03 09:46) [4]

lADO2LoginPro.SQL.Add
      ("select * from login.pro where ltrim(rtrim(code)) like "кимли") ;


 
-=snoop=- ©   (2005-08-03 09:49) [5]

простите господа...
не "like" , а "="

lADO2LoginPro.SQL.Add
             ("select * from login.pro where ltrim(rtrim(code)) = "+""""+"кимли"+"""") ;

0 а строка есть 100% я ее сам туда пихал.
1 апострофов много, для того чтоб SQL воспринял """"+"кимли"+"""" как "кимли", а не как переменную кимли


 
-=snoop=- ©   (2005-08-03 09:58) [6]

2 Dell3r ©
вообще кусок кода вот как выглядит

....
lcUsrName :=""""+trim(lADO2USERPRO.FieldValues["Code"])+"""" ;
             lcGrNm := """"+trim(lADO2USERPRO.FieldValues["Grupp"])+"""" ;
             lADO2LoginPro.SQL.Clear() ;
             lADO2LoginPro.SQL.Add
              ("select * from login.pro where ltrim(rtrim(code)) like "+lcUsrName)
....

lcUsrName = вычисляется в цикле, а "кимли" так для опытов, проверить


 
Соловьев ©   (2005-08-03 10:02) [7]


> привет всем, кака-то проблема дурацкая(), есть база *.dbf
> в ней имеется поле code

это не база дурацкая а прогер который так говорит, тем более посмотрев код

> lcUsrName :=""""+trim(lADO2USERPRO.FieldValues["Code"])+""""
> ;
>              lcGrNm := """"+trim(lADO2USERPRO.FieldValues["Grupp"])+""""
> ;
>              lADO2LoginPro.SQL.Clear() ;
>              lADO2LoginPro.SQL.Add
>               ("select * from login.pro where ltrim(rtrim(code))
> like "+lcUsrName)

убеждаешся в этом еще раз... читать:
1. TQeruy.Parameters
2. О провйдере через который конектишся.
3. Почему АДО? когда БДЕ с этим лучше будет работать?


 
-=snoop=- ©   (2005-08-03 10:11) [8]

0 не база дурацкая, а проблема...

2 почему ADO? потому что пользовался ADO и ни каких проблем не возникало, тем более с кодировкой


 
-=snoop=- ©   (2005-08-03 10:15) [9]

Соловьев ©  а что с кодом-то?


 
Sergey13 ©   (2005-08-03 10:17) [10]

2 -=snoop=- ©  
Воспользуйся советом из [2]


 
-=snoop=- ©   (2005-08-03 10:24) [11]

вот всегда так, простите за мой фр. обосрут, а что конкретно не говорят...


 
-=snoop=- ©   (2005-08-03 10:39) [12]

по поводу синтаксиса Like Ничего нового не увидел...

lADO2LoginPro.SQL.Add
              ("select * from login.pro where (code LIKE "+"""+"%фффффф%"+"""+")")

вернул 0 записей


 
Sergey13 ©   (2005-08-03 10:59) [13]

2[12] -=snoop=- ©   (03.08.05 10:39)
>по поводу синтаксиса Like Ничего нового не увидел...
Но % добавил. 8-)

>вернул 0 записей
Значит разбирайся с регистром данных в поле CODE.


 
evvcom ©   (2005-08-03 11:37) [14]


> "select * from login.pro where (code LIKE "+"""+"%фффффф%"+"""+")"

Не проще ли:
"select * from login.pro where (code LIKE "%фффффф%")"? Чего извращаться?


 
Ольга   (2005-08-03 12:05) [15]


> содержит как русские так и латинские буквы

Вопрос, я так поняла, не в синтаксисе Like, а в кодировке?
Не выбираются только русские строки или без разницы?


 
-=snoop=- ©   (2005-08-03 13:17) [16]

2Ольга только русские

2evvcom ©  "%фффффф%" = это просто пример с русскими буквами, а так у меня стоит выч.переменная...

с регистром вроде все Ок, но проверю...


 
-=snoop=- ©   (2005-08-03 14:00) [17]

чегото вообСче гон...
вот кусок кода

for s := 1 to lADO2USERPRO.RecordCount do
           begin
             lADO2USERPRO.RecNo := s ;
             lcUsrName :=lADO2USERPRO.FieldValues["Code"] ;
             //lcUsrName :=""""+trim(lADO2USERPRO.FieldValues["Code"])+"""" ;
             lcGrNm := """"+trim(lADO2USERPRO.FieldValues["Grupp"])+"""" ;
             lADO2LoginPro.SQL.Clear() ;
showmessage(upper(lcUsrName)) ;

(скорее всего понятно всем что он делает)
в общем трабл такой , что поле "Code" содержит в себе всЁ теже русские и английские фразы, ды вот

showmessage(upper(lcUsrName)) ;

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

может у меня каки-нить глобальные настройки не верные???


 
ANB ©   (2005-08-03 14:05) [18]

1. Не изгаляйся с кавычками, а юзай параметры
2. AnsiUpperCase - это для Делфи
3. В FoxPro - функция upper с русским буквами может не работать (во всяком случае - в досовском). Я не знаю движка, который это правит (может ща кто и подскажет), но тупой способ борьбы - написать свою.


 
evvcom ©   (2005-08-03 14:05) [19]


> "%фффффф%" = это просто пример с русскими буквами, а так
> у меня стоит выч.переменная...

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

> с регистром вроде все Ок, но проверю...

where upper(code) like upper(:Code)


 
evvcom ©   (2005-08-03 14:09) [20]


> но тупой способ борьбы - написать свою

Достали меня уже подобными фразами. Тупыми способами пользуются тупые люди, если кто себя относит к ним, то пользуйтесь. А написать свою - это вовсе не тупой способ.


 
ANB ©   (2005-08-03 14:13) [21]


> evvcom ©   (03.08.05 14:09) [20]
- тогда я тупой, так как этим способом обычно и пользуюсь. Только функцию придется в фоксе писать. И таскать ее везде.
А чего ты седня злой такой ? На обед не ходил ?


 
-=snoop=- ©   (2005-08-03 14:25) [22]

ANB ©, спасибо за AnsiUpperCase
evvcom © я не умею пользоваться параметрами ибо совсем недавно пишу на дельфях


 
sniknik ©   (2005-08-03 14:34) [23]

ANB ©   (03.08.05 14:13) [21]
> Только функцию придется в фоксе писать. И таскать ее везде.
а как ты ее к ODBC/OLEDB-шному драйверу подключаеш? чтобы он ее использовал, т.е. коннекте к нему из дельфей эту функцию можно было в запросах использовать.
не в этом случае, конечно, но это можно использовать.


 
-=snoop=- ©   (2005-08-03 14:34) [24]

написал вот такой код

("insert into login.pro (code) values ("ыыы")") ;

вставил мне в таб. всяких закарюк, посмотрел кадировку таб = 866, как победить? подскажите?

P.S.
2 ANB © честно говоря тут все не пышут добролюбием....


 
ANB ©   (2005-08-03 14:35) [25]


> -=snoop=- ©   (03.08.05 14:25) [22]

Ими пользоваться намного проще, чем кавычками. И полезнее.
Вот так :
в тело запроса пихаешь имя переменной с двоеточием, примерно вот так :
Query.SQL.Text := "select * from Tbl where ID = :MyID";
Затем пихаешь в параметр значение :
Query.ParamByName("MyID").AsInteger := 5;
Выполняешь запрос :
Query.Open;
В списке свойств ParamByName("MyID"). есть еще много As..., на почти все случаи в начинающей жизни.
Удобно - тело запроса нужно менять только если приспичит. Можно его заранее препарировать, работать будет быстрее. Не надо мучится с кавычками и непечатными символами в строках.
Все имхо. И неполно. Подробнее и правильнее - в Ф1.
ЗЫ. В DOA с параметрами так не работают.


 
ANB ©   (2005-08-03 14:40) [26]


> sniknik ©   (03.08.05 14:34) [23]
- никак. Я visual foxpro triber (кажись так называлось) пользовался. Я про багу с аппер я еще в клиппере знал. Там у меня была своя функция. Споткнулся - некогда было разбираться (проект горел), сделал затычку. Кидаешь текст процедуры в рабочую папку, драйвер ее сам компиляет при использовании в запросах. Грю же - тупой способ. Может кто лучше знает ?


> -=snoop=- ©   (03.08.05 14:34) [24]
- у тебя проблема с кодировкой. Имхо - лучше не юзать фоксовские таблицы вместе с делфи. А чем смотришь ? И переделай на параметр.


 
-=snoop=- ©   (2005-08-03 14:41) [27]

хе)) поменял кодировку в таб.на 1251 и

("insert into login.pro (code) values ("ыыы")") ;

отработал нормал, только вот похерились все прежние строки написанный на русском...
встает сл.вопрос, кто нить работал с DOS кодировкой)))

2 ANB © спасиб!освою!!


 
ANB ©   (2005-08-03 14:44) [28]


> -=snoop=- ©   (03.08.05 14:41) [27]

Ты откуда их писал ? (прежние строки). Залезь в дбф честной просмотрялкой (фаром, например) и определи, в какой кодировке у тебя были старые строки, в какой стали новые. Если в разной - ты злобный Буратино и все сломал. Тогда немедленно грохни свою добавленную строку.


 
-=snoop=- ©   (2005-08-03 14:48) [29]

да я б с радостью не юзать хотяб ДОСовые таблици, но пишу под БЭСТ, поэтому деться некуда....
Смотрю? смотря что сами таблици VFP9.0 или wDBFview(http://www.gendalf.ru)


 
evvcom ©   (2005-08-03 14:50) [30]


> А чего ты седня злой такой ? На обед не ходил ?

Да нет, на обед сходил. Меня на работе достал один типа начальник фразой "Берешь и тупо копируешь". В его стиле Copy/Paste пользоваться нежели функцию написать. Вот я и сорвался немного. :)
Народ! Не употребляйте эту дурацкую фразу, она меня бесит.


 
-=snoop=- ©   (2005-08-03 15:03) [31]

чегот с параметрами не выходить

lADO2LoginPro.SQL.Text := "insert into login.pro (code) values (:lcUsrName)" ;
lADO2LoginPro.Parameters.ParamByName("lcUsrName") := "жжж" ;

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


 
evvcom ©   (2005-08-03 15:10) [32]


> день сегодня не только у evvcom © плох

Нормальный у меня день.

> чегот с параметрами не выходить

Сделай запрос в designtime, посмотри, чтобы у параметров были определены типы данных и вход/выход. ParamByName проскочит на ура. Потом уже будешь динамически генерить, если захочешь, но мое имхо, не делай так.


 
Dell3r ©   (2005-08-03 15:17) [33]

После скобки перед := поставь .AsString может потянет


 
ANB ©   (2005-08-03 15:19) [34]


> -=snoop=- ©   (03.08.05 15:03) [31]

Смотреть пример и хелп. Вдумчиво и внимательно. Я для кого про As... писал ? AsString влепи.


 
-=snoop=- ©   (2005-08-04 05:59) [35]

про As... писал, да...



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

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.04 c
14-1124556764
ArtemESC
2005-08-20 20:52
2005.09.18
Соответствия команд ASM


14-1124394968
TG
2005-08-18 23:56
2005.09.18
Windows Vista


6-1117186897
Ильичев С.А.
2005-05-27 13:41
2005.09.18
Status Bar Internet Explorer


14-1125004177
ronyn
2005-08-26 01:09
2005.09.18
Как защитить программу


4-1122445245
MegaVolt
2005-07-27 10:20
2005.09.18
Как отловить двойной клик на заголовке ListView возле разделителя