|
|
|
| Добрый день! я запутался окончательно в инструкции SELECT. Мне нужно из таблицы ОткрытиеСчета выбрать нужные мне строки (Сч_ОС, Наименование, ID Table) и заполнить ими временный запрос. Это все нужно для организации поиска по трем таблицам. Далее будет повторяться таже операция для другой таблицы. Прикладываю код в строке SELECT я и запутался что откуда берется и тд...
Private Sub Search_Click()
Dim cryt As String
Dim qd As QueryDef
Dim Poisk As Database
Dim st As String
Dim strNameField As String ' поле для поиска
On Error GoTo Mystake
Set Poisk = CurrentDb
CurrentDb.Execute "create Table [Результаты поиска](Id Rec short, Наименование text(250),Id Table short(10))"
Set qd = CurrentDb.QueryDefs("TempQuery")
qd.sql = st
qd.Execute
st = "insert into SearchResults ([Id Table],[Id Rec],Наименование) select ""Наименование"",""Сч_ОС"" ,""Id Table"", from ОткрытиеСчета where Наименование like """ & txtFieldCryt.Text & """"
qd.sql = st
qd.Execute
Mystake:
MsgBox "Таблица была создана ранее"
End Sub
SearchResults это таблица куда импортируются нужные мне столбцы из таблиц.
Если у кого есть время оставьте пару комментариев пожалуйста.
ПС. Все примеры по организации поиска , какие я нашел на сайте смотрел. | |
|
| |
|
|
|
| И чо это работает?
УЖОС.
Вы создаете таблицу Результаты поиска, а затем инсертите таблицу SearchResult.
При инсерте не совпадает порядок полей.
Слишком много апострофов при вставке.
С помощью INNER JOIN можно организовать поиск по трем таблицам в одном запросе без создания отдельных таблиц. | |
|
| |
|
|
|
| Мюллер! Таблица Результаты поиска и SearchResults это одна и таже таблица! просто имя Результаты поиска отображаеся в "Таблицах" а SearchResults это Set SearchResults = Poisk.CreateTableDef("Результаты поиска") вот почему две таблицы получилось.
У меня немного усложненный поиск, из временной таблицы по клику на запись я должен попадать в соответствующую таблицу. Поэтому INNER JOIN мне не подойдет
пс. Ничего не работает | |
|
| |
|
|
|
| st = "insert into SearchResults ([Id Table],[Id Rec],Наименование) select ""Наименование"",""Сч_ОС"" ,""Id Table"", from ОткрытиеСчета where Наименование like """ & txtFieldCryt.Text & """"
Вот здесь куча вопросов.
Зачем апострофы в Select?
Несовпадение порядка следования полей В IdTable вы пытаетесь вставить наименование.
Зачем столько апострофов в операторе Like?
Если проверка идет на совпадение с txtFieldCryt.Text , то Like можно заменить на =
и вместо txtFieldCryt.Text поставить txtFieldCryt.Value
И еще типа Short в аксе нет | |
|
| |
|
|
|
| Мюллер , я исправил ошибки , как оказалось эти апострафы не нужны (раньше вроде ошибку выдавало), в инструкции like тоже удалил лишние. Сечас ошибка в qd.sql - пишет что метод .sql не найден. Вот что получилось :
Private Sub Search_Click()
Dim cryt As String
Dim qd As QueryDefs
Dim Poisk As Database
Dim st As String
Set Poisk = CurrentDb
CurrentDb.Execute "Delete * from [Результаты поиска]"
Poisk.QueryDefs.Append qd
Set qd = CurrentDb.QueryDefs("Результаты поиска")
qd.sql = st
qd.Execute
st = "insert into [Результаты поиска] ([Id Rec],Наименование,[Id Table]) select Сч_ОС,Наименование,[Id Table], from ОткрытиеСчета where (Наименование, сч_ОС) = " & txtFieldCryt.Value & ""
qd.sql = st ' тут возникает ошибка
qd.Execute
st = "insert into [Результаты поиска] (Сч_Деп, Юр_Лицо,[Id Table]) select Сч_Деп, Юр_лицо,[Id Table], from Депозитарий where (Сч_Деп, Юр_Лицо) = " & txtFieldCryt.Value & ""
qd.sql = st
qd.Execute
End Sub
|
Вроде бы (как мне подсказали уже) структура программы правильная, надо только "обвесить" ее нужными полями и все.. Вообще программа должна добавлять в таблицу Результаты поиска поля из Открытие счета и Депозитарий. А потом в ней будет производиться поиск. И при щелчке на запись должно перебрасывать в нужную таблицу...
ps. Это только часть программы, думаю в части где будет описываться поиск будет все проще тк соответствующие примеры тут есть | |
|
| |
|
|
|
| немного резко:
как выше сказал МЮЛЛЕР, всё, что Вы делаете - неправильно.
причем, Вы делаете это совершенно не понимая кода, который пытаетесь править.
либо почитайте книжку, либо опишите задачу, которую пытаетесь решить.
конкретно по предыдущему коду
qd.sql = st
qd.Execute
Вы пытаетесь выполнить запрос, который описан в переменной "st" и на момент вызова эта переменная = ""
если я правильно понимаю. | |
|
| |
|
|
|
| В том то и дело что не совсем понимаю что делаю ... в общем с книжкой я сейчас и не расстаюсь, а писать надо срочно прогу...
Можно тогда по строчке insert into... что там не так или там все так ? как я понимаю эту строчку нужна я пояснил выше. | |
|
| |
|
|
|
| ну .... никто внимание на строчку инсерт не обратит? | |
|
| |
|
|
|
| Нафига вам заморачиваться с кверидефами, если вы в них не разбираетесь?
Если нужно очистить таблицу, а затем проинсертить ее, то используйте просто конструкции
CurrentDb.Execute "бла блабла - короче тута должон быть запрос "
По вашим инсертам - килограмм ошибок.
Во первых, непонятно, что вы хотите сделать в условии Where
st = "insert into [Результаты поиска] ([Id Rec],Наименование,[Id Table]) select Сч_ОС,Наименование,[Id Table], from ОткрытиеСчета where (Наименование, сч_ОС) = " & txtFieldCryt.Value & ""
Выделенное как понимать?
Во вторых - если вы так и пишите в коде VBA, то перенос строк делается неправильно.
В третьих - пока еще не все посмотрел.
То же самое касается и второго инсерта | |
|
| |
|
|
|
| 1. В условии where должны сравниваться записи в полях (Наименование, сч_ОС) со строкой поиска.
2. Переносы я конечно так не делаю , тут только так сделал.
3. вот что у мя сделал, как вы сказали
Private Sub Search_Click()
Dim cryt As String
Dim Poisk As Database
Dim st As String
Set Poisk = CurrentDb
CurrentDb.Execute "Delete * from [Результаты поиска]"
Set Poisk = CurrentDb
sSet Poisk = CurrentDb
st = "insert into [Результаты поиска] ([Id Rec],Наименование,[Id Table]) select [Id Rec], Наименование, [Id Table] from ОткрытиеСчета where ([Наименование]) = " & txtFieldCryt.Value & ""
Poisk.Execute st
|
Еще вопрос, если в поиске должно сравниваться сразу по трем столбцам то как мне это прописать в запросе Инсерт
Щас он мне говорит что "слишком мало параметров требуется 2" | |
|
| |
|
|
|
| Например, так
Where Поле1 = Занчение1 AND Поле2 = Значение3 AND Поле3 = Значение3.
Поле1, Поле2, Поле3 - наименование полей таблицы.
Значения - сравниваемые значения.
Вместо AND может использоваться OR, Все зависит от условий сравнения | |
|
| |
|
|
|
| После [Id Table] лишняя запятая. Условие WHERE для одного поля выглядит несколько иначе:
WHERE FieldName = FieldValue
|
Без QuerryDef : CurrentDB.Exequte SQLString | |
|
| |
|
|
|
| что то вообще грустно стало... кто нибудь подскажет авторов которые пишут понятным языком по sql server ? | |
|
| |
|
|
|
| Друзья у меня получилась , не без ваших советов тоже .
Подскажите литературу по sql server для зеленых :) | |
|
| |
|
|
|
|
| Я так понимаю, автору нужна литература по языку SQL, а не SQL-server.
Например неплохая книжка для начинающих - Марин Грубер "Понимание SQL" Москва 1993.
В принципе, можно еще начать с прочтения практически любой книжки по SQL для чайников (без иронии). | |
|
| |
|
|
|
| увидел только сейчас ... Спасибо Мюллер | |
|
| |