|
|
|
| если пишу
Public Function zap()
Dim StrSQL As String
StrSQL = "Select телефон, * from выдача"
zap = StrSQL
End Function
Public Sub detal()
Dim db As Database
Set db = CurrentDb
Set Me.Поле0.Recordset = db.OpenRecordset(zap)
Me.Поле0.ColumnCount = 16
Me.поле0.ColumnHeads = True
Me.Поле0.ColumnWidths = "2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000"
db.Close
Set db = Nothing
End Sub
у меня листбокс Поле0 заполняется
а если пишу
Public Sub detal()
Dim db As Database
DIM RTS as Recordset
Set db = CurrentDb
set RTS=db.OpenRecordset(zap)
Set Me.Поле0.Recordset = RTS
Me.Поле0.ColumnCount = 16
Me.поле0.ColumnHeads = True
Me.Поле0.ColumnWidths = "2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000;2000"
db.Close
Set db = Nothing
End Sub
у меня ни чего не происходит | |
|
| |
|
|
|
| всем спасибо до меня дошло :)
я разобрался. :) | |
|
| |
|
|
|
| вот это вместо всей программы (в нужном месте формы/отчета)
Поле0.RecordSource="Select телефон, * from выдача"
+ код по размерам поля
п.с. можно пить водку носом - можно, но зачем | |
|
| |
|
|
|
| спасибо за напутствие, но это все подходит если таблица находится в этой же базе, так я и делаю.
а так есть необхордимость считать данные из другой базы , не из связанной таблицами, просто отдельно хранящейся базы.
P.S. в данном случае я просто изучаю, что бы просто понимать . | |
|
| |
|
|
|
|
сть необхордимость считать данные из другой базы , не из связанной таблицами, просто отдельно хранящейся базы
|
Поле0.RecordSource="Select телефон, * from выдача IN 'Путь к другой базе'" | |
|
| |
|
|
|
| хорошо. если я правильно понимаю, то это просто считать данные и выплюнуть их в поле, а если мне потом ,что то придется сделать , как то обработать данные то этого сделать нельзя. но это можно сделать в рекордсете.
я правильно расуждаю? или нет
я серъезно прошу помощи разобраться с рекордсетом. и просто помочь двигаться в нужном направлении при изучении и понимании. так мои рассуждения верны или нет?
программистов среди друзей нет, поэтому жду посильной помощи от вас.
так же вот уже бьюсь с вопросом как из рекордсета данные переписать в физ.таблицу. и как сделать сортировку по рекордсету и вывести отсортированные данные в рекордсет. (по второму вопросу пока помощи не надо,так как еще не приступал к изучению его. видел темы на форму попробую пока опираться на них. ) | |
|
| |
|
|
|
|
| я сам еще многого не понимаю
выгружать в таблу не нужно - рекордсет ведь к ней привязан (или к запросу)
просто редактируете (там команды специальные есть ) и все
если же табла пустая и нужно туда сгрузить рекордсет то открыть второй рекордсет(пустой таблы)
и в цикле из первого выгружать а во втором добавлять записи
когда цикл отработает таблица будет заполнена
а вы что напрямую с таблами работаете - без форм?
если это так - то вам нужно срочно заняться изучением форм
может многие вопросы отпадут | |
|
| |
|
|
|
| в том варианте который подсказал Анатолий, данные будут браться из таблицы другой базы, и рекордсет вам не нужен.
про остальные вопросы нужно более подробно, т.к. решение зависит от конкретики задачи. | |
|
| |
|
|
|
| пока конкретной задачи нет. я просто пытаюсь разобраться как это работает и как это делается.
скажем так я с циклом что то даже не могу разобраться.
вро дебы цкил сделал, пробежался по рекордсету, количество записей получил. а вот дальше выкинуть в листбокс еще разобрался, а выкинуть скажем просто в поле (вид формы не важен сейчас.) не получается, у меня в поле выводит либо первую запись либо последнюю, а так что бы все записи не получается ( к примеру хочу форму сделать в табличном виде, и в таблице вывсети все строки) | |
|
| |
|
|
|
| форма как и поле имеет свой RecordSourse (Свойство формы - Закладка "Данные" - Источник записей) - к ней привязываем таблу или запрос (SQL строка) - тогда появятся все записи. | |
|
| |
|
|
|
| dim rs as recordset 'описываем переменную
set rs= currentdb...............................................'присваиваем переменной набор записей
dim asd as text ' текстовая переменная
rs.movelast : rs.movefirst ' сбегали взад перед
if rs.recordcount>0 then ' проверили количество записей
for i=1 to rs.recordcount 'цикл по строкам
for j=0 to 4 'цикл по столбцам (предположим что мы знаем что в табле 5 столбцов)
asd=asd & rs.fields(j) ' будем собирать книгу из таблы - fields это номер столбца начинается с 0
next j ' закрыли цикл по столбцам
if i<rs.recordcount then rs.movenext ' если запись не последняя то перейти на другую строку рекордсета
next i закрыли цикл по строкам
end if ' закрыли условие
пока вот так
но там есть и другие способы (циклы Do свойства ресордсета ) - но об этом сам почитаешь | |
|
| |
|
|
|
| по поводу разобраться как работает - открываем Борей и в режиме конструктора смотрим что и как | |
|
| |
|
|
|
| так и делаю, еще вон русский help скачал и несколько ссылок на VBA , DAO, SQL и т.д в избранных | |
|
| |
|
|
|
| а вообще есть потребность данные из рекордсета как то выгрузить просто в экселевскую таблицу и сохранить. данные уже находятся в том виде в котором надо.
они выгружаются из другой базы отфильтрованные и отсортированные , они у меня показываются в листбоксе (вид полностью устраивает) , но надо сохранить в экселе.
пытаюсь сделать через
DoCmd.OutputTo acOutputTable, ("tabl"), , , True
но для этого нужна сохраненная таблица, вот ее хочу сделать как времянной и загружать данные из рекордсета (котрые считаны), выгружать в эксель, потом из этой таблы их удалять. | |
|
| |
|
|
|
| рекордсет можно сохранить в excel создав объект excel с помощью createobject и метода copyfromrecordset объекта range excel
http://hiprog.com/index.php?option=com_content&task=view&id=429 | |
|
| |
|
|
|
| пропробовал, объект exel открылся, а вот на строчке copyfromrecordset выдает ошибку
"Run-time error '438'"
"Object doesn't support this property or method"
скорее всего я не подключил библиотеку?
если да ее можно подключать программно? | |
|
| |
|
|
|
| ничего подключить не нужно. вероятнее всего вы вызываете метод не у того объекта
код покажите | |
|
| |
|
|
|
| Private Sub VigXL_Click()
Dim ExcelSheet As Object
Set ExcelSheet = CreateObject("Excel.Sheet")
ExcelSheet.Application.Visible = True
ExcelSheet.Cells(1, 1).CopyFromRecordset RST
ExcelSheet.SaveAs "C:\ TEST.xls"
ExcelSheet.Application.Quit
Set ExcelSheet = Nothing
End Sub
RST - это рекордсет который я и хочу выгрузить | |
|
| |
|
|
|
| переписал код в таком виде и все заработало.
правдо я не совсем понял что делает каждая строчка. сможете пояснить?
и еще один момент так как не совсем все понял, можно сделать так чтобы и заголовки столбцов копировались в EXEL?
Private Sub VigXL_Click()
Dim ExcelSheet As Object
Dim wb As Workbook
Dim ws As Worksheet
Set ExcelSheet = CreateObject("Excel.application")
ExcelSheet.SheetsInNewWorkbook = 1
Set wb = ExcelSheet.Workbooks.Add
Set ws = wb.Worksheets(1)
ws.Cells(1, 1).CopyFromRecordset RST
wb.Close
ExcelSheet.Quit
End Sub | |
|
| |
|
|
|
| и еще один момент так как не совсем все понял, можно сделать так чтобы и заголовки столбцов копировались в EXEL?
|
ws.Cells(1, 1) = "Заголовок1"
ws.Cells(1, 2) = "Заголовок2" и т.д.
Private Sub VigXL_Click()
Dim ExcelSheet As Object
' такое объявление переменных wb и ws потребует наличия ссылки на библиотеку excel
' если описать просто как as object, то ссылки не потребуется
Dim wb As Workbook
Dim ws As Worksheet
' получаем ссылку на объект Excel
Set ExcelSheet = CreateObject("Excel.application")
' устанавливаем свойство SheetsInNewWorkbook равным 1 (это означает что во вновь создаваемой книге будет 1 лист , в принципе это можно не делать)
ExcelSheet.SheetsInNewWorkbook = 1
' в коллекцию Workbooks добавляем новый объект (Workbook) одновременно сохраняя ссылку на него в переменной wb
Set wb = ExcelSheet.Workbooks.Add
' получаем ссылку на 1-й лист (Worksheet ) в созданной книге одновременно сохраняя ссылку на него в переменной ws
Set ws = wb.Worksheets(1)
'для ячейки с адресом 1,1 вызываем метод CopyFromRecordset передавая в качестве параметра наш рекордсет
ws.Cells(1, 1).CopyFromRecordset RST
' закрывам Workbook вызывая метод Close
wb.Close
Закрываем excel с помощью метода Quit
ExcelSheet.Quit
End Sub
|
| |
|
| |
|
|
|
| если сделаете заголовки
то выгружать надо не в первую строку а во вторую (в первой у вас будут заголовки)
вот так
ws.Cells(2, 1).CopyFromRecordset RST | |
|
| |
|
|
|
| спасибо всем. не успел отписаться ранее с заголовками разобрался. но вот не понял почему первый вариант не работает, что я там не дописал? | |
|
| |
|
|
|
| открыли ексель без чистого листа | |
|
| |
|
|
|
| Добрый день.
спасибо за подсказки, все заработало. но есть один не понятный для меня момент.
на 8 компах работает нормально, Ексель запускается, все копируется и форматируется.
а на одном компе ексель почему то даже не открывается. почему не могу понять, думал что нибудь в настройках безопасности - сделал самый низкий уровнь но не помогло | |
|
| |
|
|
|
| на неправильном компе какой офис стоит
и какой офис на правильных
возможно что ссылка идет на офис 2003 а установлен офис 2007 | |
|
| |
|
|
|
|
|
а вообще есть потребность данные из рекордсета как то выгрузить просто в экселевскую таблицу и сохранить.
|
В Екселе есть закладка Данные - там импорт из кучи разных мест в том числе из Акса - можно любой запрос, таблу открыть из Екселя и далее обработать как хочешь.
Для сводных таблиц, например, Ексель удобнее. | |
|
| |
|
|
|
| у меня таблицы ежемесячно формируются с количеством записей более 2 500 000 строк (записей) и в них столбцов штук 10.
выгружать их в ексель и обрабатывать не резон.
вот с помощью запросов я выбираю нужные записи из отдельного файла (получается от 500 до 1000 строк) и их уже хочу выгружать в ексел | |
|
| |
|
|
|
| Ексель может брать SQL строку (твой запрос который формируется в Аксе) и загонять автоматом его в себю.
при работе мастера тебе предлагается выбрать объект для импорта и там перечень таблиц и запросов твоей базы.
где-то в болталке выкладывали ссылку на видео по этому делу там еще DataMiding (как-то так) поищи | |
|
| |
|
|
|
| спасибо за разъяснения. с самими циклами все понятно (разновидностями и их условиями), а вот с телом цикла как то у меня не залдилось. еще раз спасибо.
пошел дальше грызть... дырки | |
|
| |