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

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
FromTanC
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.03.2006 (Пт) 10:12

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

Сообщение FromTanC » 18.03.2006 (Сб) 13:34

Никак не получается составить запрос:
есть табличка, в которой хранятся времена начало уроков, и есть таблица расписания.
Хочется получить выборку, показывающую расписание с учётом "окон", то есть:
9:00 Математика
10:00 Физика
11:00 ............ (нет урока)
12:00 Информатика
и т.д

БД: ACCESS

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.03.2006 (Сб) 13:53

Код: Выделить всё
SELECT times.time, schedule.lesson
FROM times LEFT JOIN schedule ON times.time = schedule.time
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

FromTanC
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.03.2006 (Пт) 10:12

Сообщение FromTanC » 19.03.2006 (Вс) 14:11

Спасибо!
И еще вопрос:
у меня сохраненный в ACCESS запрос, с неким параметром. Как мне в рекордсете передать этот параметр?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.03.2006 (Вс) 14:17

Переходим на самостоятельное изучение.
http://msdn.microsoft.com/library/en-us ... ommand.asp
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

FromTanC
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.03.2006 (Пт) 10:12

Сообщение FromTanC » 21.03.2006 (Вт) 7:53

мне нужно, чтобы за какой-то конкретный день возвращалось расписание.
Запрос:

Код: Выделить всё

SELECT tbl_time.time, tbl_schedule.*
FROM tbl_time, tbl_schedule
WHERE tbl_time.id=tbl_schedule.time_id and tbl_schedule.date=Date() ;
UNION
SELECT tbl_time.time, tbl_schedule.*
FROM tbl_time LEFT JOIN tbl_schedule ON tbl_time.id=tbl_schedule.time_id
where tbl_schedule.time_id Is Null;

возвращает не то что надо.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 11:18

На два запроса разбей.

Код: Выделить всё
SELECT *
FROM tbl_schedule
WHERE tbl_schedule.date=Date()

Код: Выделить всё
SELECT tbl_time.time, query1.*
FROM tbl_time LEFT JOIN query1 ON tbl_time.id=query1.time_id
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

FromTanC
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.03.2006 (Пт) 10:12

Сообщение FromTanC » 21.03.2006 (Вт) 12:41

А как можно сделать в запросе искуственную колонку?
Например она будет вычисляться на основе двух других?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2006 (Вт) 12:53

FromTanC
Знаешь, если ты найдёшь и не прочитаешь книжку "SQL для чайников", ты так и будешь спрашивать на форуме о направлении каждого следующего шага. В результате чего тебя начнут игнорить и правильно сделают.

Код: Выделить всё
a+b
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

FromTanC
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.03.2006 (Пт) 10:12

Сообщение FromTanC » 21.03.2006 (Вт) 15:15

Спасибо за совет.

FromTanC
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.03.2006 (Пт) 10:12

Сообщение FromTanC » 29.03.2006 (Ср) 13:40

и еще вопрос по поводу передачи параметра в запросе
БД ACCESS2003
Код: Выделить всё

Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim conString As String
Dim prm As ADODB.Parameter
Dim cat As ADOX.Catalog
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset

conString = "Provider=Microsoft.Jet.OLEDB.4.0;"
conString = conString & "Data Source="
conString = conString & App.Path & "\DataBase.mdb"
conString = conString & ";"
conString = conString & "Jet OLEDB:Database Password="
conString = conString & PASSWD

With conn
    .ConnectionString = conString
    .Open
End With

Set cat = New ADOX.Catalog
Dim prc As ADOX.Procedure
   
cat.ActiveConnection = conn
Set cmd = cat.Procedures("query").Command

Set rs = New ADODB.Recordset
   If Not (cmd Is Nothing) Then
      cmd.Parameters.Item(0).Value = 1
      Set rs = cmd.Execute
      Debug.Print rs.RecordCount
      rs.Close
  End If

   Set cmd = Nothing


Хочу сделать запрос с параметром (Parameters.Item(0))
Но не работает, в рекордсет не попадают данные.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 30.03.2006 (Чт) 13:07

FromTanC писал(а):и еще вопрос по поводу передачи параметра в запросе


Set rs = New ADODB.Recordset
If Not (cmd Is Nothing) Then
cmd.Parameters.Item(0).Value = 1
Set rs = cmd.Execute
Debug.Print rs.RecordCount
rs.Close
End If

Set cmd = Nothing
[/syntax]

Хочу сделать запрос с параметром (Parameters.Item(0))
Но не работает, в рекордсет не попадают данные.


Перед тем как пользовать Parameter добавь его в коллекцию Parameters

что то типа
Код: Выделить всё
Set param = cmd.CreateParameter("@.....",..............)
cmd.Parameters.Append param


только зачем тебе параметр в твоем запросе?
//<-
Mit freundlichen Grüßen
//->

FromTanC
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.03.2006 (Пт) 10:12

Сообщение FromTanC » 30.03.2006 (Чт) 14:16

У меня хранимый запрос типа
Код: Выделить всё

Select * from table where summ>[MyParam]

Так вот мне и надо передать этот самый [MyParam] в запрос и получить на основе выборки рекордсет.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 30.03.2006 (Чт) 14:41

Код: Выделить всё
Dim cmd As ADODB.Command
Dim p As ADODB.Parameters
Dim rs As ADODB.Recordset, SQL As String


    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = cn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "q2"
    ' Îïèñàíèå ïàðàìåòðîâ
    Set p = cmd.Parameters
    p.Append cmd.CreateParameter("Category", adInteger, adParamInput, , Me.txtParam.Text)
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open cmd, , adOpenStatic, adLockReadOnly
   
    Set Me.DataGrid1.DataSource = rs



Код: Выделить всё
PARAMETERS [Category] Long;
SELECT q1.CategoryName, q1.Description, Products.ProductID, Products.ProductName, Products.QuantityPerUnit, Products.UnitPrice, Products.UnitsInStock
FROM q1 INNER JOIN Products ON q1.CategoryID = Products.CategoryID;


Вернуться в Базы данных

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

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

    TopList  
cron