Помогите с запросом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
shahmatist
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 09.03.2006 (Чт) 0:01
Откуда: Волгоград

Помогите с запросом

Сообщение shahmatist » 19.10.2007 (Пт) 10:15

Есть две таблицы: Первая типа документа перемещения со склада на склад (..., ID_SKLAD1 (LONG), ID_SKLAD2 (LONG), ...) и вторая справочник складов (ID, NAME, ...). Как составить запрос, штобы в результате был список документов где вместо ID складов наименования? (Если бы там был тока один склад, то это лекго решается путём объединения. А сдесь как?) Заранее спасибо.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 19.10.2007 (Пт) 11:52

Не менее легко с помощью двух объединений.
Код: Выделить всё
select spr1.name, spr2.name
from perem
left join sprav as spr1 on spr1.ID = perem.ID_SKLAD1
left join sprav as spr2 on spr2.ID = perem.ID_SKLAD2
Лучший способ понять что-то самому — объяснить это другому.

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 02.01.2008 (Ср) 21:17

Доброго времени суток!
Прошу подсказки.
Суть: база mdb, VB6, несколько колонок в таблице. На форме - контролы от А до Я.
Вопрос: Как сделать, чтобы при click, скажем, контрола с обозначением "А" рекордсет отбирал и выводил в ДатаГрид только те записи, которые начинаются с буквы "А". И, соответственно, также и другие контролы.
Кажется, что просто, но, видимо, что-то делаю неверно, раз не получается.
Спасибо!

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 02.01.2008 (Ср) 21:38

... WHERE colName LIKE 'A%'
Salus populi suprema lex

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 02.01.2008 (Ср) 21:43

dr.MIG
Вот спасибо!
теперь я понял, что намудрил со звездочками и одиночными апострофами...

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 17:07

есть три DataGrid и три Adodc. DataGrid1 связан с Adodc1,DataGrid2 связан с Adodc2,DataGrid3 связан с Adodc3.
Adodc1 берет данные из таблицы Работы(с полями таб№,наименование,стоимость.В этой таблице перечислены работы,выполненные сотрудниками)с помщью запроса Select Работы* from Работы.
Adodc2 берет данные из таблицы Сотрудник(с полями таб№ и Фамилия) с помощью запроса select Сотрудник.* from Сотрудник.
может ли Adodc 3 брать данные из таблицы Работы,причем такие,что таб№ был равен таб№,выбранному в DataGrid2.
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 19.10.2008 (Вс) 17:26

Не знаю, как там с ADODC, не пользовался.. Но в adodb.recordset можно выбрать все записи, а потом ставить .Filter по нужному признаку. Т.е.
.filter = "colname = " & tabNum
tabNum можно выдрать из активной строки второго датагрида..
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 17:30

в adodc тоже есть фильтр,сейчас попробую. Спасибо!!!
Нет ни одной надёжной системы безопасности!!!

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 17:51

Работает :-) еще такой вопрос: нужно выбрать из поля Дата значения текущего месяца. какое будет условие выборки?
Нет ни одной надёжной системы безопасности!!!

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 18:18

Или хотя бы как выбрать значения меньшие чем текущая дата? Почему-то .Filter = "Дата =" & < Date
не работает:(
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 19.10.2008 (Вс) 19:25

SUPchik писал(а):Или хотя бы как выбрать значения меньшие чем текущая дата? Почему-то .Filter = "Дата =" & < Date
не работает:(

Если я не ошибаюсь, придётся дату конвертить в другой формат:
По крайней мере, я так делал:

Дату нужно из нашего формата dd.mm.yyyy переконвертить в "их" mm/dd/yyyy
После чего заключить в #
Т.е. если сегодня 17.10.08, должно получиться 10/17/2008
.Filter = "Дата < #10/17/2008#"

Но возможно есть и другой способ. Попробуй. )

Выбрать текущий месяц так:
.filter = "Дата > #10/01/2008# AND Дата < #11/01/2008#"
Последний раз редактировалось iGrok 19.10.2008 (Вс) 19:48, всего редактировалось 1 раз.
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 19:43

а если надо вывести дни текущего месяца,которые записаны в столбце Дата?
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 19.10.2008 (Вс) 19:50

SUPchik писал(а):а если надо вывести дни текущего месяца,которые записаны в столбце Дата?

Ммм. В смысле, только список дней? Или "записи, относящиеся к текущему месяцу"?
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 19:59

записи, относящиеся к текущему месяцу
Нет ни одной надёжной системы безопасности!!!

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 20:04

Да,и еще,можно ли использовать двойной фильтр? А то если записать так:
Adodc1.Recordset.Filter = "ДатаПроведения =" & Date
'Adodc1.Recordset.Filter = "Таб№ =" & Form1.Adodc2.Recordset(0).Value
выполняется первый фильтр,а затем второй,не смотря на то,что отобрал первый.
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 19.10.2008 (Вс) 20:57

SUPchik писал(а):записи, относящиеся к текущему месяцу


SUPchik писал(а):Да,и еще,можно ли использовать двойной фильтр? А то если записать так:
Adodc1.Recordset.Filter = "ДатаПроведения =" & Date
'Adodc1.Recordset.Filter = "Таб№ =" & Form1.Adodc2.Recordset(0).Value
выполняется первый фильтр,а затем второй,не смотря на то,что отобрал первый.


Хм. В моём предпоследнем посте (каюсь, поправил позже, чем ты написал следующий) содержатся ответы на оба вопроса. )

iGrok писал(а):Выбрать текущий месяц так:
.filter = "Дата > #10/01/2008# AND Дата < #11/01/2008#"


З.Ы. Не надо постить несколько сообщений подряд без перерыва. Пользуйся кнопкой "правка". )
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 21:26

не хочет он так работать :(
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 19.10.2008 (Вс) 22:00

SUPchik писал(а):не хочет он так работать :(

Ну а на что он ругается?

Условия объединяются при помощи AND.
Даты по идее должны быть именно в таком виде. С остальным - экспериментируй. Я, повторюсь, с ADODC не работал.. )
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 22:05

на знаки "больше" "меньше"
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 19.10.2008 (Вс) 22:13

SUPchik писал(а):на знаки "больше" "меньше"

Странно. Попробуй до кучи Дата в [] заключить ( "[Дата] > #10/01/2008#" ). Может быть, поможет. Но это так, пальцем в небо.

Кстати, неплохо бы текст ошибки, что ли.. )
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 19.10.2008 (Вс) 22:27

Не,в квадратные скобки не надо.
Компилирующая ошибка: expectad:expression.
С текущей датой у меня получилось вот так:
Adodc1.Recordset.Filter = "ДатаПроведения=" & Date & " AND Таб№=" & Form1.Adodc2.Recordset(0).Value
Осталось сделать за текущей месяц и выбранный диапазон.
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 20.10.2008 (Пн) 12:28

SUPchik писал(а):Не,в квадратные скобки не надо.
Компилирующая ошибка: expectad:expression.
С текущей датой у меня получилось вот так:
Adodc1.Recordset.Filter = "ДатаПроведения=" & Date & " AND Таб№=" & Form1.Adodc2.Recordset(0).Value
Осталось сделать за текущей месяц и выбранный диапазон.

А ты строку покажи, на которую он ругается "expected: expression".. А то у меня зарождаются смутные сомнения..
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 20.10.2008 (Пн) 15:05

Всё, диапазоном разобрался:
Adodc1.Recordset.Filter = "ДатаПроведения>=#20/10/2008# AND ДатаПроведения<=#20/10/2008#"

Только вот надо чтобы текущий месяц и год брались из системной даты. Через Month(Date) он не хочет отбирать,ведь допустим 20.10.2008 не будет равно 10,т.к. Month(Date) возвращает номер месяца или я не прав?
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 20.10.2008 (Пн) 19:38

SUPchik писал(а):Только вот надо чтобы текущий месяц и год брались из системной даты. Через Month(Date) он не хочет отбирать,ведь допустим 20.10.2008 не будет равно 10,т.к. Month(Date) возвращает номер месяца или я не прав?

Не понял.

Если тебе нужны записи за текущий месяц, ты ставишь отбор по принципу "date >= #mm.01.yyyy# AND date < #mm+1.01.yy#"
mm - тек. месяц. mm+1 - следующий месяц. Ну либо смотришь последнее число месяца. Тогда нужно ставить нестрогое условие. (<= вместо <)
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 20.10.2008 (Пн) 20:13

Я сделал так:
Adodc1.Recordset.Filter = ("ДатаПроведения>=#01/" & Month(Date) & "/" & Year(Date) & "# AND ДатаПрведения<=#31/" & Month(Date) & "/" & Year(Date) & "#"
Нет ни одной надёжной системы безопасности!!!

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 20.10.2008 (Пн) 20:43

Простите за назойливость,у меня еще вопрос:
Adodc1.Recordset.Filter = "ДатаПроведения=" & Date & " AND Таб№=" & Form1.Adodc2.Recordset(0).Value работает

а вот:
Adodc1.Recordset.Filter = "ДатаПроведения>=#01/" & Month(Date) & "/" & Year(Date) & "# AND ДатаПроведения<=#31/" & Month(Date) & "/" & Year(Date) & "#" And Таб№ = " & Form1.Adodc2.Recordset(0).Value"
не работает. Выскакивает ошибка несовпадения типов.

Причем второе выражение без And Таб№ = " & Form1.Adodc2.Recordset(0).Value" работает.

Где ошибка?
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 20.10.2008 (Пн) 21:38

SUPchik писал(а):Простите за назойливость,у меня еще вопрос:
Adodc1.Recordset.Filter = "ДатаПроведения=" & Date & " AND Таб№=" & Form1.Adodc2.Recordset(0).Value работает

а вот:
Adodc1.Recordset.Filter = "ДатаПроведения>=#01/" & Month(Date) & "/" & Year(Date) & "# AND ДатаПроведения<=#31/" & Month(Date) & "/" & Year(Date) & "#" And Таб№ = " & Form1.Adodc2.Recordset(0).Value"
не работает. Выскакивает ошибка несовпадения типов.

Причем второе выражение без And Таб№ = " & Form1.Adodc2.Recordset(0).Value" работает.

Где ошибка?

Если у тебя так и написано
Adodc1.Recordset.Filter = "ДатаПроведения>=#01/" & Month(Date) & "/" & Year(Date) & "# AND ДатаПроведения<=#31/" & Month(Date) & "/" & Year(Date) & "#" And Таб№ = " & Form1.Adodc2.Recordset(0).Value"

то ошибка в кавычках. Я тебе выделил курсивом то, что у тебя написано в кавычках, т.е. распознаётся компилятором, как строка.
У тебя получается "#"And Таб№ = " & Form1.Adodc2.Recordset(0).Value"
Здесь - "#" - строка. И " & Form1.Adodc2.Recordset(0).Value" - строка. А "And Таб№ =" ты пытаешься подсунуть компилятору вне кавычек. Естественно он не знает, что это такое.
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 20.10.2008 (Пн) 21:52

И еще вопросик,надо чтобы дата отбиралась по диапазону,который будет находиться в двух TextBoxax(начало диапазона и конец диапазона). Так вот, я предполагаю, что нужно взять две переменные, значение которых равно значению свойства TextBox.Text. Какой тип данных должен быть у этих переменных,и в каком формате записывать дату в TextBoxax? Как будет выглядить фильтр?
Нет ни одной надёжной системы безопасности!!!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с запросом

Сообщение iGrok » 20.10.2008 (Пн) 22:13

SUPchik писал(а):И еще вопросик,надо чтобы дата отбиралась по диапазону,который будет находиться в двух TextBoxax(начало диапазона и конец диапазона). Так вот, я предполагаю, что нужно взять две переменные, значение которых равно значению свойства TextBox.Text. Какой тип данных должен быть у этих переменных,и в каком формате записывать дату в TextBoxax? Как будет выглядить фильтр?

Дык так же. Значение фильтра сотавляется абсолютно по тому же принципу.

Тип данных.. Да хоть строка. Фильтр-то полюбому будет строкой.
Собственно, в текстбоксах может быть что угодно. Главное преобразовать его в итоге к тому же виду, что и запрос, который у тебя работает. А уж как ты будешь это делать: заставлять пользователя вводить значение в правильном формате, или ставить вместо textbox'ов Datapicker'ы, и их значение приводить к нужному формату (dd/mm/yyyy) - это уже твоё дело.
label:
cli
jmp label

SUPchik
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 15.10.2008 (Ср) 21:46
Откуда: Луховицы

Re: Помогите с запросом

Сообщение SUPchik » 20.10.2008 (Пн) 23:12

Через DataTimePicker удобно делать,спасибо за подсказку,что есть такой элемент управления ;-)
Нет ни одной надёжной системы безопасности!!!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27

    TopList