Сформировать SQL-запрос

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сформировать SQL-запрос

Сообщение Dummiel » 14.07.2006 (Пт) 11:20

SQL - это вам не плюшки со стола тырить!

Други!
Как сформировать SQL-запрос, чтобы сравнение было по первым 10-ти знакам поля? (Типа Mid() в VB?)

"SELECT * FROM Table WHERE Num = " & ... и далее - здесь ясно, но в поле Num 20-значное выражение типа String, а мне сравнить нужно с первыми 10-ю знаками.

На выражение "SELECT * FROM Table WHERE Mid(Num, 1, 10) = " VB, естественно, начинает материться.

А открывать рекордсет, находить поле, вырезать из него 10 знаков, потом результат подставлять в запрос - конечно можно, но, чувствую, это напрасная трата ресурсов с точки зрения мозолей на пальчиках.

SQL - штука, конечно, весьма удобная, но дотумкать с непривычки не могу, не работал я с ним раньше. Вот и растерялся! :)

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.07.2006 (Пт) 11:26

SELECT * FROM Table WHERE string1 LIKE "твои10символов%"

Из мануала по SQL ясно, что в LIKE % обозначает произвольное количество символов, чтобы отменить его специальное значения, перед ним (равно как и неред вопросом) нужно поставить ESC символ(по дефоулту - "\")
Изображение

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 14.07.2006 (Пт) 11:33

SQL - понятие растяжимое. Что за база?
2keks-n: а вторые 10 символов?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.07.2006 (Пт) 11:36

Nicky
Любая база должна поддерживать базовые функции SQL... Если она их не поддерживает, то её надо выкинуть фтопку, а её аффтора напоить йадом.
А вторые десять/бесконечность симболов-знак %
Изображение

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 14.07.2006 (Пт) 11:48

keks-n писал(а):Nicky
Любая база должна поддерживать базовые функции SQL... Если она их не поддерживает, то её надо выкинуть фтопку, а её аффтора напоить йадом.
А вторые десять/бесконечность симболов-знак %

Access в топку что-ли? Только за то, что там mid вместо substr?
Ха, бесконечность! Так и дурак сможет

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.07.2006 (Пт) 11:50

Некорректно-есть аналог, значит есть поддержка.

А требования выполнены - идёт подборка по первым 10 символам.
Изображение

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 14.07.2006 (Пт) 11:59

keks-n писал(а):Некорректно-есть аналог, значит есть поддержка.

Но ранее keks-n писал(а):Любая база должна поддерживать базовые функции SQL

substr определена стандартом ANSI

keks-n писал(а):А требования выполнены - идёт подборка по первым 10 символам.

Это от лукавого. А если придется выбирать с определенного символа?

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 14.07.2006 (Пт) 12:04

Смотри-ка, я думал, опять пошлют, а оно вона как... :)

База Access, 15 символов в поле - первые 5 - буквы-тире, остальные - цифры в символьном представлении типа "АА-АА0045600057". Вот выборка и нужна была по первым 10-ти символам.

Поле складывается из двух полей:
первые 10 символов - буквы-тире-цифры (as String), остальные цифры тоже в формате String. Предложения по усовершенствованию содержимого поля отметаются - работаю с "чужой" готовой БД.

А за подсказку - гран мерси. :D

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 14.07.2006 (Пт) 12:19

И что, Mid не пашет?
Покажи код

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 14.07.2006 (Пт) 22:21

Nicky, а зачем нужен MID, если уже подсказали нормальное решение с использованием LIKE?

Кроме того (теоретически), при наличии индексов, LIKE по первым символам будет быстрее MID (SUBSTR) по тем же символам.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 17.07.2006 (Пн) 7:17

Ууу, забыл про подчеркивание... :?

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 17.07.2006 (Пн) 8:22

If nRegNo = 0 Then
sSQL = "SELECT * FROM Table"
Else
sSQL = "SELECT * FROM Table WHERE tID LIKE '" & fNo & "%'"
End If

Set dbRS = dbRun.OpenRecordset(sSQL)

Вот только чего-то и эта фраза не работает. Не делает VB выборку, не находит нужной записи, соответственно, и RecordCount = 0.

В чем косяк?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 17.07.2006 (Пн) 8:38

Прикольно ключевые поля проверять по LIKE. Попробуй вместо % поставить *

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 17.07.2006 (Пн) 9:41

Спасибо, со звездочкой все заработало так, как надо.

Прикольно ключевые поля проверять по LIKE.


А знаете, чем чайник отличается от профессионала? Тем, что он все делает не так, как профессионал! :)


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

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

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

    TopList