Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выбор нужных столбцов из таблицы(инструкция SELECT)
 
 автор: SergeyKV   (18.11.2008 в 11:11)   личное сообщение
 
 

Добрый день! я запутался окончательно в инструкции 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 это таблица куда импортируются нужные мне столбцы из таблиц.
Если у кого есть время оставьте пару комментариев пожалуйста.
ПС. Все примеры по организации поиска , какие я нашел на сайте смотрел.

  Ответить  
 
 автор: Мюллер   (18.11.2008 в 12:31)   личное сообщение
 
 

И чо это работает?
УЖОС.

Вы создаете таблицу Результаты поиска, а затем инсертите таблицу SearchResult.
При инсерте не совпадает порядок полей.
Слишком много апострофов при вставке.

С помощью INNER JOIN можно организовать поиск по трем таблицам в одном запросе без создания отдельных таблиц.

  Ответить  
 
 автор: SergeyKV   (18.11.2008 в 13:50)   личное сообщение
 
 

Мюллер! Таблица Результаты поиска и SearchResults это одна и таже таблица! просто имя Результаты поиска отображаеся в "Таблицах" а SearchResults это Set SearchResults = Poisk.CreateTableDef("Результаты поиска") вот почему две таблицы получилось.
У меня немного усложненный поиск, из временной таблицы по клику на запись я должен попадать в соответствующую таблицу. Поэтому INNER JOIN мне не подойдет

пс. Ничего не работает

  Ответить  
 
 автор: Мюллер   (18.11.2008 в 14:10)   личное сообщение
 
 

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 в аксе нет

  Ответить  
 
 автор: SergeyKV   (19.11.2008 в 10:52)   личное сообщение
 
 

Мюллер , я исправил ошибки , как оказалось эти апострафы не нужны (раньше вроде ошибку выдавало), в инструкции 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. Это только часть программы, думаю в части где будет описываться поиск будет все проще тк соответствующие примеры тут есть

  Ответить  
 
 автор: Дрюня   (19.11.2008 в 12:00)   личное сообщение
 
 

немного резко:
как выше сказал МЮЛЛЕР, всё, что Вы делаете - неправильно.
причем, Вы делаете это совершенно не понимая кода, который пытаетесь править.
либо почитайте книжку, либо опишите задачу, которую пытаетесь решить.

конкретно по предыдущему коду

qd.sql = st
qd.Execute

Вы пытаетесь выполнить запрос, который описан в переменной "st" и на момент вызова эта переменная = ""

если я правильно понимаю.

  Ответить  
 
 автор: SergeyKV   (19.11.2008 в 12:10)   личное сообщение
 
 

В том то и дело что не совсем понимаю что делаю ... в общем с книжкой я сейчас и не расстаюсь, а писать надо срочно прогу...

Можно тогда по строчке insert into... что там не так или там все так ? как я понимаю эту строчку нужна я пояснил выше.

  Ответить  
 
 автор: SergeyKV   (19.11.2008 в 16:14)   личное сообщение
 
 

ну .... никто внимание на строчку инсерт не обратит?

  Ответить  
 
 автор: Мюллер   (19.11.2008 в 16:26)   личное сообщение
 
 

Нафига вам заморачиваться с кверидефами, если вы в них не разбираетесь?
Если нужно очистить таблицу, а затем проинсертить ее, то используйте просто конструкции
CurrentDb.Execute "бла блабла - короче тута должон быть запрос "

По вашим инсертам - килограмм ошибок.
Во первых, непонятно, что вы хотите сделать в условии Where

st = "insert into [Результаты поиска] ([Id Rec],Наименование,[Id Table]) select Сч_ОС,Наименование,[Id Table], from ОткрытиеСчета where (Наименование, сч_ОС) = " & txtFieldCryt.Value & ""
Выделенное как понимать?

Во вторых - если вы так и пишите в коде VBA, то перенос строк делается неправильно.
В третьих - пока еще не все посмотрел.

То же самое касается и второго инсерта

  Ответить  
 
 автор: SergeyKV   (19.11.2008 в 17:18)   личное сообщение
 
 

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"

  Ответить  
 
 автор: мюллер   (19.11.2008 в 17:28)   личное сообщение
 
 

Например, так
Where Поле1 = Занчение1 AND Поле2 = Значение3 AND Поле3 = Значение3.

Поле1, Поле2, Поле3 - наименование полей таблицы.
Значения - сравниваемые значения.

Вместо AND может использоваться OR, Все зависит от условий сравнения

  Ответить  
 
 автор: Denis V.   (19.11.2008 в 17:08)   личное сообщение
 
 

После [Id Table] лишняя запятая. Условие WHERE для одного поля выглядит несколько иначе:

WHERE FieldName = FieldValue

Без QuerryDef : CurrentDB.Exequte SQLString

  Ответить  
 
 автор: SergeyKV   (19.11.2008 в 18:00)   личное сообщение
 
 

что то вообще грустно стало... кто нибудь подскажет авторов которые пишут понятным языком по sql server ?

  Ответить  
 
 автор: SergeyKV   (19.11.2008 в 19:46)   личное сообщение
 
 

Друзья у меня получилась , не без ваших советов тоже .

Подскажите литературу по sql server для зеленых :)

  Ответить  
 
 автор: Pasat   (19.11.2008 в 20:44)   личное сообщение
 
 

http://hiprog.com/forum/read.php?id_forum=1&id_theme=4063&page=1

  Ответить  
 
 автор: Мюллер   (20.11.2008 в 10:44)   личное сообщение
 
 

Я так понимаю, автору нужна литература по языку SQL, а не SQL-server.
Например неплохая книжка для начинающих - Марин Грубер "Понимание SQL" Москва 1993.
В принципе, можно еще начать с прочтения практически любой книжки по SQL для чайников (без иронии).

  Ответить  
 
 автор: SergeyKV   (27.11.2008 в 10:15)   личное сообщение
 
 

увидел только сейчас ... Спасибо Мюллер

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList