Страница: 1 |
Страница: 1 |
Вопрос: Отчет
Добавлено: 14.02.07 21:42
Автор вопроса: ENIX | ICQ: 238819245
Здраствуйте, возникла проблема, а именно - нужна программа (компонент) под шестерку для создания отчетов.
В поставке с VB идет Кристал 4.6, но при попытке создания отчета и выбора БД вылетает программа. Пробывал на разных БД...
Скиньте у кого есть на enix@meta.ua буду благодарен.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
Eugeny
Вопросов: 0
Ответов: 26
Профиль | | #1
Добавлено: 14.02.07 23:17
А чем DataReport не устраивает?
Номер ответа: 2
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #2
Добавлено: 14.02.07 23:28
Разбирался, но не выходит...
Как передать DataSourche, использую DAO?
Номер ответа: 3
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #3
Добавлено: 15.02.07 00:06
Пишет вообщем вечно:
Report width is larger then the paper width
Номер ответа: 4
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #4
Добавлено: 15.02.07 00:11
Всё разобрался. Спасиб за идею, буду осваивать.
Только есть еще вопрос, как сделать вид страницы альбомный?...
Номер ответа: 5
Автор ответа:
Eugeny
Вопросов: 0
Ответов: 26
Профиль | | #5
Добавлено: 15.02.07 01:38
Вопрос не из простых, но если очень надо то скажу.
Номер ответа: 6
Автор ответа:
Eugeny
Вопросов: 0
Ответов: 26
Профиль | | #6
Добавлено: 15.02.07 01:49
'смена альбомной и книжной ориентации
Private PageDirection As Integer
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const PRINTER_ACCESS_ADMINISTER = &H4
Private Const PRINTER_ACCESS_USE = &H8
Private Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)
Private Const DM_MODIFY = 8
Private Const DM_IN_BUFFER = DM_MODIFY
Private Const DM_COPY = 2
Private Const DM_OUT_BUFFER = DM_COPY
Private Const DM_DUPLEX = &H1000&
Public Const DMDUP_SIMPLEX = 1
Private Const DMDUP_VERTICAL = 2
Private Const DMDUP_HORIZONTAL = 3
Private Const DM_ORIENTATION = &H1&
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmLogPixels As Integer
dmBitsPerPel As Long
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
dmICMMethod As Long '// Windows 95 only
dmICMIntent As Long ' // Windows 95 only
dmMediaType As Long ' // Windows 95 only
dmDitherType As Long ' // Windows 95 only
dmReserved1 As Long ' // Windows 95 only
dmReserved2 As Long ' // Windows 95 only
End Type
Private Type PRINTER_DEFAULTS
pDatatype As String
pDevMode As Long
 esiredAccess As Long
End Type
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Private Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal Command As Long) As Long
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function DocumentProperties Lib "winspool.drv" Alias "ocumentPropertiesA" (ByVal hwnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, ByVal pDevModeOutput As Any, ByVal pDevModeInput As Any, ByVal fMode As Long) As Long
Public Sub SetOrientation(NewSetting As Long, chng As Integer)
 im PrinterHandle As Long
 im PrinterName As String
 im pd As PRINTER_DEFAULTS
 im MyDevMode As DEVMODE
 im Result As Long
 im Needed As Long
 im pFullDevMode As Long
 im pi2_buffer() As Long 'This is a block of memory for the Printer_Info_2 structure
'If you need to use the Printer_Info_2 User Defined Type, the
' definition of Printer_Info_2 in the API viewer is incorrect.
' pDevMode and pSecurityDescriptor should be defined As Long.
PrinterName = Printer.DeviceName
If PrinterName = "" Then
Exit Sub
End If
pd.pDatatype = vbNullString
pd.pDevMode = 0&
pd.DesiredAccess = PRINTER_ALL_ACCESS
Result = OpenPrinter(PrinterName, PrinterHandle, pd)
Result = GetPrinter(PrinterHandle, 2, ByVal 0&, 0, Needed)
ReDim pi2_buffer((Needed \ 4))
Result = GetPrinter(PrinterHandle, 2, pi2_buffer(0), Needed, Needed)
pFullDevMode = pi2_buffer(7)
Call CopyMemory(MyDevMode, ByVal pFullDevMode, Len(MyDevMode))
MyDevMode.dmDuplex = NewSetting
MyDevMode.dmFields = DM_DUPLEX Or DM_ORIENTATION
MyDevMode.dmOrientation = chng
Call CopyMemory(ByVal pFullDevMode, MyDevMode, Len(MyDevMode))
Result = DocumentProperties(0, PrinterHandle, PrinterName, ByVal pFullDevMode, ByVal pFullDevMode, DM_IN_BUFFER Or DM_OUT_BUFFER)
Result = SetPrinter(PrinterHandle, 2, pi2_buffer(0), 0&
Call ClosePrinter(PrinterHandle)
 im p As Printer
For Each p In Printers
If p.DeviceName = PrinterName Then
Set Printer = p
Exit For
End If
Next p
Printer.Duplex = MyDevMode.dmDuplex
End Sub
Public Sub ChngOrientationPortrait()
PageDirection = 1
Call SetOrientation(DMDUP_SIMPLEX, 1)
End Sub
Public Sub ChngOrientationLandscape()
PageDirection = 2
Call SetOrientation(DMDUP_SIMPLEX, PageDirection)
End Sub
Номер ответа: 7
Автор ответа:
Eugeny
Вопросов: 0
Ответов: 26
Профиль | | #7
Добавлено: 15.02.07 01:50
Устраивает?
Номер ответа: 8
Автор ответа:
Eugeny
Вопросов: 0
Ответов: 26
Профиль | | #8
Добавлено: 15.02.07 01:57
'DataReport для печати произвольных записей
Dim datarec As ADODB.Recordset
Set datarec = New ADODB.Recordset
Set datarec.ActiveConnection = Nothing
datarec.Fields.Append "naim1", adBSTR
datarec.Fields.Append "naim2", adBSTR
datarec.Fields.Append "naim3", adBSTR
datarec.Open
datarec.AddNew
datarec.Fields("naim1".Value = "fd gsdf"
datarec.Fields("naim2".Value = "sdf sdfsdf"
datarec.Fields("naim3".Value = "aas"
Set DataReport1.DataSource = datarec
DataReport1.Show 1
В секции Detail должны быть RptTextBox с DataField (naim1.2.3)
Номер ответа: 9
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #9
Добавлено: 15.02.07 21:02
Спасибо.
При собст. решении вопроса смены ориетации страницы увидел два решения - через АПИ как вы написали и более простой через класс Printer обьявленный как Глобал в шестерке. Почему нельзя использовать второй вариант?
Еще вопрос, я понял работа с DataReport ведется только через ADO, DAO она не хочет воспринимать..?
Номер ответа: 10
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #10
Добавлено: 15.02.07 21:37
По первому стало ясно всё.
Собствено код отчасти понятен. Берем принтер по дефолту. Достаем с памяти его струтуру, изменяем в ней нужные параметры и копираем заменяя ту. Но
1)Какую роль выполняют функции
 ocumentProperties
SetPrinter
и перебор принтеров и дальнейшим присвоением
2)pFullDevMode = pi2_buffer(7) , что за магическое число 7. Почему ссылка на структуру хранится в 32-36 байтах, если я правильно понимаю.
Да много вопросов, но оставлять всё так и вставлять незнакомый код в программу - не тема)
Спасибо еще раз за "вырезку".
Номер ответа: 11
Автор ответа:
Eugeny
Вопросов: 0
Ответов: 26
Профиль | | #11
Добавлено: 15.02.07 21:45
"Почему нельзя использовать второй вариант?" Честно, не помню. Да и API ближе и быстрее. Но может быть...
"ataReport ведется только через ADO" - Да.
Вообще, пред. просмотр и печать трудоемкий процесс. Если интересно: "atabase Reporting Engine"
http://www.freevbcode.com/ShowCode.asp?ID=5389
Номер ответа: 12
Автор ответа:
Eugeny
Вопросов: 0
Ответов: 26
Профиль | | #12
Добавлено: 15.02.07 21:48
"но оставлять всё так и вставлять незнакомый код в программу - не тема"
Ну, разумеется, за тебя никто ничего не напишет.