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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2009, 23:14   #1
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию Проблемы с кодировкой?

Составил запрос:
Код:
begin
case typename.ItemIndex of
0:nametype:='Плащ';
1:nametype:='Шлем';
2:nametype:='Амулет';
3:nametype:='Меч';
4:nametype:='Посох';
5:nametype:='Лук';
6:nametype:='Доспехи';
7:nametype:='Щит';
8:nametype:='Пояс';
9:nametype:='Перчатки';
10:nametype:='Кольцо';
11:nametype:='Ботинки';
end;
for i:=1 to generalsource.maxid do
begin
  ZQuery1.Close;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.Add('select name from items where type='+nametype+';');
  ZQuery1.Active:=true;
  dblb.Items.Add(ZQuery1.FieldByName('name').AsString);
end;
end;
программа выдает ошибку "SQL Error: Unknown column "тут иероглифы" in 'where clause'"
я так понимаю он не может найти запись в бд с таким названием? Как побороть это? Судя по всему кодировка виновата....
Я ваш новый друг, смиритесь!
[Smarik] вне форума Ответить с цитированием
Старый 10.02.2009, 00:03   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Для начала:
ZQuery1.SQL.Add('select name from items where type='+''''+nametype+'''');
или
ZQuery1.SQL.Add('select name from items where type='+'Quoted(nametype));
Тогда не будет восприниматься как имя поля.

З.Ы. Никак не пойму, почему не используют для однострочных запросов ZQuery1.SQL.Text:= ?

Последний раз редактировалось mihali4; 10.02.2009 в 00:11.
mihali4 вне форума Ответить с цитированием
Старый 10.02.2009, 15:14   #3
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию

Спасибо, первый вариант работает, второй не пробовал.
Есть проблемка он проходит цикл например 40 раз, записей удовлетворяющих условию where например 1, так вот он 40 раз её добавит, понятия не имею как sql-ом проверить что записи разные, добавлять переменную вносить в немм считанную запись и проверять с уже загруженными желания нет, ибо придется помучиться и программа будет довольно медленно работать, она и при простом считавании не ахти в скорости, что посоветуете?
насчет .text не использовал ибо sql и все компоненты для работы с ним для меня новое, делаю так как написано в статья/форумах/книгах =).
Я ваш новый друг, смиритесь!
[Smarik] вне форума Ответить с цитированием
Старый 10.02.2009, 15:36   #4
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

а если вот так попробовать:
begin
case typename.ItemIndex of
0:nametype:='Плащ';
1:nametype:='Шлем';
2:nametype:='Амулет';
3:nametype:='Меч';
4:nametype:='Посох';
5:nametype:='Лук';
6:nametype:='Доспехи';
7:nametype:='Щит';
8:nametype:='Пояс';
9:nametype:='Перчатки';
10:nametype:='Кольцо';
11:nametype:='Ботинки';
end;

ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('select name from items where type='+nametype+';');
ZQuery1.Active:=true;
while not ZQuery1.eof do
begin
dblb.Items.Add(ZQuery1.FieldByName( 'name').AsString);
ZQery1.next;
end;

end;
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 10.02.2009, 15:55   #5
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию

А что это изменит? Добавляет все записи из бд, потом опять и опять, вроде все попорядку, но куча одинакового.

======================

Внимательнее посмотрел на условие, по идеи должно работать, но цикл не останавливается...
Я ваш новый друг, смиритесь!

Последний раз редактировалось [Smarik]; 10.02.2009 в 15:58.
[Smarik] вне форума Ответить с цитированием
Старый 10.02.2009, 16:15   #6
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

смотри:
select name from items where type='+nametype+';'
этот запрос выберет из таблицы все имена тип которых будет nametype

select distinct name from items where type='+nametype+';'
выберёт все уникальные имена тип которых будет nametype

дальше
немного изменим:

ZQuery1.First; - перемещаемся на первую запись твоего набора ZQuery1
while not (ZQuery1.eof) do
begin
dblb.Items.Add(ZQuery1.FieldByName( 'name').AsStrin g);
ZQuery1.next;
end;

походу должно работать, если нет можно поробовать немного не так:

if ZQuery1.RecordCount<>0
then
for i:=0 to ZQuery.RecordCount-1 do
begin
dblb.Items.Add(ZQuery1.FieldByName( 'name').AsStrin g);
ZQuery1.next;
end;
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 10.02.2009, 16:18   #7
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

если можно сформулируй точно что ты хочешь получить, в каком виде, и из чего
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 10.02.2009, 16:37   #8
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию

как то не очень работает =)
что хочу получить:
в бд хранятся записи, пользователь выбирает тип меч, броня и.т.п
после выбора формируется запрос, например он выбрал меч, идет запрос добавить в листбокс имена всех записей тип который = меч, вот вобщем то и все.
Я ваш новый друг, смиритесь!
[Smarik] вне форума Ответить с цитированием
Старый 10.02.2009, 17:08   #9
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

м-м-м-м, а что именно не работает: запрос или не добавляет в листбокс?
и ещё, ты как-то можешь проверить что возвращает твой запрос, не через твоё приложение, а каким-то другим способом (например каким-то SQL-manager-ом)?
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 10.02.2009, 17:09   #10
начинающий кодер
только учусь!
Форумчанин
 
Аватар для начинающий кодер
 
Регистрация: 08.02.2009
Сообщений: 124
По умолчанию

А цикл то зачем?Вытащи записи в запрос. Потом добавляй их.
«Я знаю, что ничего не знаю, но многие не знают и этого».
начинающий кодер вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с кодировкой... SynonymMixer Общие вопросы Delphi 6 28.01.2009 15:40
Проблема с кодировкой feniks65 Паскаль, Turbo Pascal, PascalABC.NET 13 06.01.2009 11:00
Проблемы с кодировкой Levchik HTML и CSS 2 16.12.2008 16:12
Проблемы с кодировкой писем Черничный Win Api 7 16.06.2008 12:19
Дельфи 8. Проблема с кодировкой. Venor Общие вопросы Delphi 1 10.06.2008 20:44