Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 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
    ;DesiredAccess 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 ";DocumentPropertiesA" (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)
    ;Dim PrinterHandle As Long
    ;Dim PrinterName As String
    ;Dim pd As PRINTER_DEFAULTS
    ;Dim MyDevMode As DEVMODE
    ;Dim Result As Long
    ;Dim Needed As Long
    ;Dim pFullDevMode As Long
    ;Dim 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)
    ;Dim 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)Какую роль выполняют функции
  ;DocumentProperties
  SetPrinter
  и перебор принтеров и дальнейшим присвоением
2)pFullDevMode = pi2_buffer(7) , что за магическое число 7. Почему ссылка на структуру хранится в 32-36 байтах, если я правильно понимаю.
Да много вопросов, но оставлять всё так и вставлять незнакомый код в программу - не тема)

Спасибо еще раз за "вырезку".

Ответить

Номер ответа: 11
Автор ответа:
 Eugeny



Вопросов: 0
Ответов: 26
 Профиль | | #11 Добавлено: 15.02.07 21:45
"Почему нельзя использовать второй вариант?" Честно, не помню. Да и API ближе и быстрее. Но может быть...
";DataReport ведется только через ADO" - Да.
Вообще, пред. просмотр и печать трудоемкий процесс. Если интересно: ";Database Reporting Engine"
http://www.freevbcode.com/ShowCode.asp?ID=5389

Ответить

Номер ответа: 12
Автор ответа:
 Eugeny



Вопросов: 0
Ответов: 26
 Профиль | | #12 Добавлено: 15.02.07 21:48
"но оставлять всё так и вставлять незнакомый код в программу - не тема"
Ну, разумеется, за тебя никто ничего не напишет.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам