Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Сборка отчета по критериям


Автор: Igor Graf 12.4.2005, 08:40
Привет всем!

Сегодня у меня появилась следующая задача: есть бд под названием AMD в ней данные о работниках , форма
управления бд, отчет выполненый через data report.

Необходимо сделать следующее: нужно, чтобы мой отчет можно было составить при помощи определения критерия , например чтобы в нем были только те , кто работает более 10 лет, таких критериев несколько.

Вопрос : как можно програмно "Собрать" отчет при помощи выбора критерия?

Буду рад любым предложениям, заранее благодарен



С уважением Graf

Автор: Exception 12.4.2005, 15:23
В datareport sql не катит? Т.е. он как работает?

Автор: Igor Graf 14.4.2005, 07:46
В то -то и дело, что я не знаю работает ли sql в нем. Но не обязательно нужен data report , я буду рад любым
идеям, например сделать отчет в excel или типа того

Автор: Exception 14.4.2005, 18:01
Не в смысле ты можешь отфильтровать recordset по sql а потом генерить отчет.

Автор: Igor Graf 15.4.2005, 07:35
Привет Run-time error, спасибо за предложение!
Если можно опиши по подробнее как отфильтровать recordset по sql или мпожет ссылочка на какой-нибудь ресурс есть?



С уважением Graf

Автор: Exception 15.4.2005, 11:28
Ну смотри
Код

dim cn as connection,rs as adodb.recordset
'открываешь соединение и т.д.
'...
'...
rs.open "Select * From table1 where ID>50 and Name like 'А%'"
'...
'А дальше пихаешь результат(rs) в отчет

Автор: Igor Graf 16.4.2005, 07:58
Run-time error Большое тебе спасибо.

Если не трудно, плиз , поясни: создаем соединение , рекордсет-это понятно , а вот как результат- то в отчет запихать, и что означает 'А%'"?


С уважением Graf. smile

Автор: Exception 16.4.2005, 12:13
A% это я для примера привел (это условие отбора в sql) а результат как записать я не знаю - с отчетами вообще не знаком. Можно построчно копировать из река в отчет...

Автор: Igor Graf 19.4.2005, 08:10

Run-time error Спасибо за помощь.


Народ если кто знает, как запрос в отчет вставить, пожалуйста подскажите.


С уважением Graf

Автор: Gannibal 19.4.2005, 08:33
почитай МСДН русский... вот ссылочка хорошая там подробно можно сказать описанно как работать с БД и создать отчёт

http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/DataAccess/VB60_Data_Environment.mspx

Автор: Igor Graf 19.4.2005, 08:45
M.E.G.U.S Спасибо за ссылку. Я знаком с содержанием статьи, мне надо узнать как закинуть в отчет sql - запрос, и желательно (хотя не принципиально) програмно


С уважением Graf

Автор: Gannibal 19.4.2005, 08:58
можно отчёт вот так вот сделать тогда, я вот так вот отчёт создавал ;)

Код

Dim Db As Database
Dim Rst As Recordset

Private Sub Form_Load()
Dim Cena As Double
Dim CenaCelkem As Double
Set Db = OpenDatabase("c:\sklad\sklad97.mdb")
Set Rst = Db.OpenRecordset("SELECT * FROM sklad ORDER BY ID")
lblInventura.Caption = "на складе : " & Date & " время : " & Time
On Error GoTo Chyba
Rst.MoveFirst
Zacatek:
Cena = Rst.Fields("штук") * Rst.Fields("цена")
CenaCelkem = Cena + CenaCelkem
lblInventura.Caption = lblInventura.Caption & Chr(10) & Rst.Fields("товар") & " - " & Rst.Fields("штук") & " " & Rst.Fields("тип") & " - " & Cena & " баксов"
Rst.MoveNext
GoTo Zacatek
Chyba:
lblInventura.Caption = lblInventura.Caption & Chr(10) & Chr(10) & "цена полностю : " & CenaCelkem & " Kè"
inventura.PrintForm
End Sub


я незнаю если ты типа такого хочешь чтото я туга понял.. если нет то обясни мне ....

Автор: amt 19.4.2005, 09:15
M.E.G.U.S
Мне тоже нужно создавать отчет. Я этот вопрос поднимал в своем топике "Создание базы данных" - никто не откликнулся и я решил перейти суда.
Есть запрос. Как создать отчет в БД. Имеется ввиду готовый объект как во вкладке Отчеты в Access, чтобы реагировал на изменения сведений в запросе?
Твой код подойдет для этого??? smile

Автор: Igor Graf 19.4.2005, 09:59
M.E.G.U.S предложил неплохой код, спасибо ему будем пробовать.


С уважением Graf

Автор: Gannibal 19.4.2005, 15:49
Цитата
M.E.G.U.S
Мне тоже нужно создавать отчет. Я этот вопрос поднимал в своем топике "Создание базы данных" - никто не откликнулся и я решил перейти суда. Есть запрос. Как создать отчет в БД. Имеется ввиду готовый объект как во вкладке Отчеты в Access, чтобы реагировал на изменения сведений в запросе?
Твой код подойдет для этого???


должен подойти почему бы и нет ты из базы данных берёш парамтры и сним чёто делаешь ;) и выводишь на печать у меня.. ;) просто показано как можно работать с параметрами из БД

Автор: Igor Graf 20.4.2005, 08:10
Привет M.E.G.U.S, всетаки я не понял как вставить запрос в отчет , мне нужно сделать следующее:
вот у меня бд , в ней ,допустим данные о сотрудниках, мне надо выбрать всех иногородних и все сведения о них поместить в отчет. Запрос я сделал, надо его в отчет data report запихать.
Запрос:
Код

 Private Const ksCN1$ = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\"
  Private Const ksCN2$ = ";Persist Security Info=False"
Set cn = New ADODB.Connection
  cn.Open ksCN1 & "\BASE.mdb" & ksCN2
  Set rs = New ADODB.Recordset
  rs.Open "SELECT * FROM Table" & IIf(Text1.Text = "", "", " WHERE (Nemestnie LIKE '" & Text1.Text & "*')"), cn, adOpenKeyset, adLockOptimistic"


Вот такие дела, спасибо за участие.

Автор: Gannibal 20.4.2005, 16:28
вот тебе ссылка две штуки smile достаточно подробно описано.. но если непоимёшь скажи я тебе напишу smile

http://azbukavb.narod.ru/dbdoc/RepDB1.html
http://azbukavb.narod.ru/dbdoc/RepDB2.html

Автор: Gannibal 20.4.2005, 16:44
а вот так бы у тебя скорее всего код должен бы был написан

Код

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

With cn
    .Provider = "Microsoft.Jet.OLEDB.3.51"     ' указываем провайдера
    .ConnectionString = "C:\DataReport.mdb"     'указываем путь к нашей базе
    .Open ' открываем
End With

With rs
    .ActiveConnection = cn
    .LockType = adLockReadOnly
    .CursorType = adOpenDynamic
    .Source = "SELECT * FROM Table" & IIf(Text1.Text = "", "", " WHERE (Nemestnie LIKE '" & Text1.Text & "*')"
    .Open
End With

Set DataReport1.DataSource = rs  'Связываем DataReport и наш рекордсет


DataReport1.Sections("Section4").Controls("lblRHeader").Caption = "Отчёт" ' заголовок отчёта

DataReport1.Show 1 ' показать отчёт

Set rs = Nothing  ' убить обэкты
Set cn = Nothing ' убить обэкт

End Sub

Автор: Gannibal 20.4.2005, 17:21
извини просто перед этим тебя плхо понял как отчёт хочешь создать ;)

Автор: Igor Graf 22.4.2005, 07:23
M.E.G.U.S прими мою благодарность, похоже это то самое, буду пробовать, как наберу 100 сообщений, обязательно поставлю тебе+, если не получится еще спрошу, еще раз спасибо.
По последним 2 ссылкам дает ошибки, может у меня провайдер глючит

С уважением Graf

Автор: Gannibal 22.4.2005, 13:19
Цитата(Igor @ 22.4.2005, 06:23)
По последним 2 ссылкам дает ошибки, может у меня провайдер глючит

ссылки рабочие, у тебя с нетом наверное что то ;) а так рад помочь

Автор: Igor Graf 23.4.2005, 07:31
Ok еще раз спасибо.

Автор: Igor Graf 30.4.2005, 08:19
Привет!
Наконец-то получилось создать отчет с sql запросом, и я подумал, вдруг кому пригодится, код выглядит так:
Код

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
 Private Const CN1$ = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\"
 Private Const CN2$ = ";Persist Security Info=False"
Private Sub Command1_Click()
Dim strSQL As String
strSQL = "Select * From Table Where Field='" & Text1.Text & "'"
Set rs = cn.Execute(strSQL)
Set DataReport1.DataSource = rs
DataReport1.Sections("Section4").Controls("Label4").Caption = "Otchet"
DataReport1.Sections("Section2").Controls("Label1").Caption = "Fio"
DataReport1.Sections("Section2").Controls("Label2").Caption = "Fakultet"
DataReport1.Sections("Section2").Controls("Label3").Caption = "Gruppa"
DataReport1.Sections("Section1").Controls("Text1").DataField = "Fio"
DataReport1.Sections("Section1").Controls("Text2").DataField = "Fakultet"
DataReport1.Sections("Section1").Controls("Text3").DataField = "Gruppa"
DataReport1.Show

End Sub

Private Sub Form_Load()
Set cn = New ADODB.Connection
cn.Open CN1 & "\Base.mdb" & CN2
End Sub

Private Sub Form_Unload(Cancel As Integer)
rs.Close
rs = Nothing
cn.Close
cn = Nothing
End Sub

Должен отметить, что поле Field должно иметь тип данных текст, иначе не получается, у меня стоял memo и пока не изменил в отчете данные не отображались.

Еще раз большое спасибо M.E.G.U.S за ссылки.

С уважением Graf


Автор: amt 6.5.2005, 07:46
Igor Graf
Попробовал твой код примастрячить к своей БД.
Возникают проблемы с юзером и паролем.

Так я создаю базу
Код

   Set newDB = dao.Workspaces(0).CreateDatabase("C:\temp.mdb", dbLangGeneral & ";pwd=1", dbVersion30 + dbEncrypt)


А этим кодом открываю

Код

 Dim strConnect As String
Dim pwd As String
pwd = "1"
strConnect = ";database=" & App.Path & "\db23.mdb" & ";PWD=" & pwd & ""  'data access with password"
Set mdb = OpenDatabase("", True, False, strConnect)



Не подскажешь как при таком открытии запихать сведения из ГОТОВОГО запроса в DataReport
Заранее благодарен
С уважением, АМТ

Автор: Igor Graf 6.5.2005, 12:50
Приветствую Amt!!

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


С уважением Graf

Автор: Igor Graf 10.5.2005, 08:30
amt Привет!
Вот блин зараза никак не могу программно подключиться к такой базе, пробовал так:

Код

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
 Private Const CN1$ = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\"
 Private Const CN2$ = ";Persist Security Info=true"
Private Sub Command1_Click()
Dim strSQL As String
strSQL = "Select * From Table Where Field='" & Text1.Text & "'"
Set rs = cn.Execute(strSQL)
Set DataReport1.DataSource = rs
DataReport1.Show
End Sub
Private Sub Form_Load()
Set cn = New ADODB.Connection
cn.Open CN1 & "\1.mdb" & CN2, "admin", "Password"
End Sub
Private Sub Form_Unload(Cancel As Integer)
rs.Close
rs = Nothing
cn.Close
cn = Nothing
End Sub

не как не выходит, может к ней надо строго через Dao подключаться? Щас пробую через Dao
как получу положительный результат напишу. Да подключиться я через Dao смог вот теперь пихаю запрос

Автор: Igor Graf 10.5.2005, 09:12
Это снова я , что-то вроде получилось
Код

Dim strConnect As String
Dim pwd As String
Dim mdb As Database


Private Sub Command2_Click()
Data1.DatabaseName = "c:\1.mdb"
Data1.RecordSource = "Select * From 1 where ID=2"
Data1.Refresh
mdb.Close
End Sub

Private Sub Form_Load()
pwd = "'1'"
strConnect = ";database=c:\1.mdb" & ";PWD=" & pwd & ""
Set mdb = OpenDatabase("", True, False, strConnect)
End Sub


Вот так реально работает .
Если теперь data как- нибудь присобачить к отчету, то все будет круто

Автор: amt 14.5.2005, 20:51
Присетсвую
Igor Graf!
С прошедшими праздниками.
Спасибо за код буду пробовать у себя.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)