Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Выборка по заданному параметру


Автор: dize 18.8.2009, 10:48
Есть 2 таблицы в бд "Dengi" и "groups", связанные по ключевому полю id_group. Необходимо из дочерней таблицы сделать выборку всех значений одного столбца Kod_klienta, где поле id_group пустое. После этого добавить в листбокс. Вроде элементарная задача, а ругается, что "предоставлены несовместимые или неполные данные"..
Код

begin
  ListBox1.Items.Clear;
  ADOQ_kod.active:=false;
  ADOQ_kod.SQL.Text:='select * FROM dengi order by Kod_klienta WHERE id_group:=' ';';
  ADOQ_kod.open;
  ADOQ_kod.First;
    While not ADOQ_kod.eof do
      begin
        ListBox1.Items.add(ADOQ_kod.fieldbyname('Kod_klienta').AsString);
        ADOQ_kod.Next;
      end;
  ADOQ_kod.active:=false;
end;

Автор: Frees 18.8.2009, 11:02
напиши как то так


Код

...
 with ADOQ_kod do
 begin
  Close;
  SQL.Text:='select * FROM dengi order by Kod_klienta WHERE id_group is NULL';
  open;
  First;
end
...


Автор: dize 18.8.2009, 11:11
Пробовал и так..ошибка синтаксиса в выражении "Kod_klienta WHERE id_group is NULL", если исправить на "Kod_klienta WHERE id_group:=' ' ", ругается как раньше.

Автор: Данкинг 18.8.2009, 11:40
А если кавычки двойные поставить?

Автор: dize 18.8.2009, 11:47
Цитата(Данкинг @ 18.8.2009,  11:40)
А если кавычки двойные поставить?

Тоже самое.

Автор: Frees 18.8.2009, 11:49
Код

ADOQ_kod.SQL.Text:='select * FROM dengi order by Kod_klienta WHERE id_group ='#39#39;

Автор: dize 18.8.2009, 11:57
unterminated string

Автор: Frees 18.8.2009, 12:09
субд какая?
Цитата(dize @  18.8.2009,  13:48 Найти цитируемый пост)
где поле id_group пустое

что значит пустое(null или пустая строка)?? какой тип поля??

Автор: dize 18.8.2009, 12:22
Null, integer.

Автор: Akella 18.8.2009, 12:35
Цитата(dize @  18.8.2009,  10:48 Найти цитируемый пост)
d_group:=

это в какой такой базе данных синтаксис дельфи?

может так?
Код

where id_group = null


или так?
Код

where id_group is null

Автор: Frees 18.8.2009, 12:36
Цитата(Akella @  18.8.2009,  15:35 Найти цитируемый пост)
where id_group = null

всегда false

Автор: dize 18.8.2009, 12:37
Цитата(Akella @  18.8.2009,  12:35 Найти цитируемый пост)
это в какой такой базе данных синтаксис дельфи?

Access...там я и не такого насмотрелся. Если убрать " : ", то пишет, что пропущен оператор в этом выражении.

Автор: Akella 18.8.2009, 12:38
Цитата(dize @  18.8.2009,  10:48 Найти цитируемый пост)
ругается, что "предоставлены несовместимые или неполные данные"..

Неужели так тяжело сообщать сразу кто или что ругается, где и в какой строке кода? А также версию IDE, СУБД (название и версию), компоненты доступа.... smile  smile  smile 
Уже на всех форумах тырнета раз по 500 писали, что на форумах телепатов нет. Ну что за детский сад? Мы здесь что, собрались загадки отгадывать или помощь друг другу оказывать? smile

Добавлено через 3 минуты и 53 секунды
Сначала оттестируй запрос в самой среде Access.

Автор: dize 18.8.2009, 13:17
Access 2000, метод доступа ADO.
Только что пробил запрос через access, вот что вышло.
В случае, если он имеет данный вид:
Код

SELECT kod_klienta
FROM dengi INNER JOIN groups ON groups.id_group=Dengi.id_group
WHERE dengi.id_group=2;

То отображаются корректные данные по всем Kod_klienta с id_group равным 2.

В случае, если:
Код

SELECT kod_klienta
FROM dengi INNER JOIN groups ON groups.id_group=Dengi.id_group
WHERE dengi.id_group=0; // или dengi.id_group=null
 
То выводит пустое поле по кодам клиента.
Значение по умолчанию в таблице dengi у поля id_group - 0. Но так как они связаны с другой таблицей, где нет этого значения, то он и не находит ничего. Все-таки интересно как разрешить данную ситуацию.

Автор: Akella 18.8.2009, 15:59
Тебе про null намекали? Даже явного говорили. smile 

Автор: former 18.8.2009, 17:31
Цитата(dize @  18.8.2009,  10:48 Найти цитируемый пост)
Есть 2 таблицы в бд "Dengi" и "groups", связанные по ключевому полю id_group.

Цитата(dize @  18.8.2009,  10:48 Найти цитируемый пост)
Kod_klienta, где поле id_group пустое.

О чем вообще речь идет? Какой id_group = null? Поле id_group ключевое - NotNull. Если я не ошибаюсь. 

Автор: Akella 18.8.2009, 19:31
Цитата(former @  18.8.2009,  17:31 Найти цитируемый пост)
Какой id_group = null? Поле id_group ключевое - NotNull.

Это вторичный ключ (внешний). А разве внешний ключ не может содержать пустые значения?

Автор: former 18.8.2009, 19:57
Цитата(Akella @  18.8.2009,  19:31 Найти цитируемый пост)
А разве внешний ключ не может содержать пустые значения? 

Ну это смотря как он определен. Подозреваю, что у dize он NotNull, поэтому и выскакивает сообщение:
Цитата(dize @  18.8.2009,  10:48 Найти цитируемый пост)
"предоставлены несовместимые или неполные данные"..


Добавлено через 3 минуты и 23 секунды
Ну и это тоже необходимо:
Цитата(Akella @  18.8.2009,  12:35 Найти цитируемый пост)
Выделить всёкод SQL
1:where id_group is null


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)