Страница: 1 |
Вопрос: Отчет | Добавлено: 14.02.07 21:42 |
Автор вопроса: ![]() |
Здраствуйте, возникла проблема, а именно - нужна программа (компонент) под шестерку для создания отчетов.
В поставке с VB идет Кристал 4.6, но при попытке создания отчета и выбора БД вылетает программа. Пробывал на разных БД... Скиньте у кого есть на enix@meta.ua буду благодарен. |
Ответы | Всего ответов: 12 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 26 |
Профиль | Цитата | #1 | Добавлено: 14.02.07 23:17 |
А чем DataReport не устраивает? |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 238819245 Вопросов: 9 Ответов: 76 |
Профиль | Цитата | #2 | Добавлено: 14.02.07 23:28 |
Разбирался, но не выходит...
Как передать DataSourche, использую DAO? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 238819245 Вопросов: 9 Ответов: 76 |
Профиль | Цитата | #3 | Добавлено: 15.02.07 00:06 |
Пишет вообщем вечно:
Report width is larger then the paper width |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 238819245 Вопросов: 9 Ответов: 76 |
Профиль | Цитата | #4 | Добавлено: 15.02.07 00:11 |
Всё разобрался. Спасиб за идею, буду осваивать.
Только есть еще вопрос, как сделать вид страницы альбомный?... |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 26 |
Профиль | Цитата | #5 | Добавлено: 15.02.07 01:38 |
Вопрос не из простых, но если очень надо то скажу. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 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 ![]() 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 " ![]() Public Sub SetOrientation(NewSetting As Long, chng As Integer) ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() '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) ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 26 |
Профиль | Цитата | #7 | Добавлено: 15.02.07 01:50 |
Устраивает? |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 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" ![]() datarec.Fields("naim2" ![]() datarec.Fields("naim3" ![]() Set DataReport1.DataSource = datarec DataReport1.Show 1 В секции Detail должны быть RptTextBox с DataField (naim1.2.3) |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 238819245 Вопросов: 9 Ответов: 76 |
Профиль | Цитата | #9 | Добавлено: 15.02.07 21:02 |
Спасибо.
При собст. решении вопроса смены ориетации страницы увидел два решения - через АПИ как вы написали и более простой через класс Printer обьявленный как Глобал в шестерке. Почему нельзя использовать второй вариант? Еще вопрос, я понял работа с DataReport ведется только через ADO, DAO она не хочет воспринимать..? |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 238819245 Вопросов: 9 Ответов: 76 |
Профиль | Цитата | #10 | Добавлено: 15.02.07 21:37 |
По первому стало ясно всё.
Собствено код отчасти понятен. Берем принтер по дефолту. Достаем с памяти его струтуру, изменяем в ней нужные параметры и копираем заменяя ту. Но 1)Какую роль выполняют функции ![]() SetPrinter и перебор принтеров и дальнейшим присвоением 2)pFullDevMode = pi2_buffer(7) , что за магическое число 7. Почему ссылка на структуру хранится в 32-36 байтах, если я правильно понимаю. Да много вопросов, но оставлять всё так и вставлять незнакомый код в программу - не тема) Спасибо еще раз за "вырезку". |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 26 |
Профиль | Цитата | #11 | Добавлено: 15.02.07 21:45 |
"Почему нельзя использовать второй вариант?" Честно, не помню. Да и API ближе и быстрее. Но может быть...
" ![]() Вообще, пред. просмотр и печать трудоемкий процесс. Если интересно: " ![]() http://www.freevbcode.com/ShowCode.asp?ID=5389 |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 26 |
Профиль | Цитата | #12 | Добавлено: 15.02.07 21:48 |
"но оставлять всё так и вставлять незнакомый код в программу - не тема"
Ну, разумеется, за тебя никто ничего не напишет. |
Страница: 1 |
|