Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: что я делаю не так:?
 
 автор: Krusz   (11.08.2011 в 08:55)   личное сообщение
 
 

если пишу

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
у меня ни чего не происходит

  Ответить  
 
 автор: Krusz   (11.08.2011 в 09:04)   личное сообщение
 
 

всем спасибо до меня дошло :)

я разобрался. :)

  Ответить  
 
 автор: kot_k_k   (11.08.2011 в 09:07)   личное сообщение
 
 

вот это вместо всей программы (в нужном месте формы/отчета)

Поле0.RecordSource="Select телефон, * from выдача"
+ код по размерам поля


п.с. можно пить водку носом - можно, но зачем

  Ответить  
 
 автор: Krusz   (11.08.2011 в 13:49)   личное сообщение
 
 

спасибо за напутствие, но это все подходит если таблица находится в этой же базе, так я и делаю.
а так есть необхордимость считать данные из другой базы , не из связанной таблицами, просто отдельно хранящейся базы.

P.S. в данном случае я просто изучаю, что бы просто понимать .

  Ответить  
 
 автор: Анатолий (Киев)   (11.08.2011 в 14:22)   личное сообщение
 
 


сть необхордимость считать данные из другой базы , не из связанной таблицами, просто отдельно хранящейся базы


Поле0.RecordSource="Select телефон, * from выдача IN 'Путь к другой базе'"

  Ответить  
 
 автор: Krusz   (11.08.2011 в 15:27)   личное сообщение
 
 

хорошо. если я правильно понимаю, то это просто считать данные и выплюнуть их в поле, а если мне потом ,что то придется сделать , как то обработать данные то этого сделать нельзя. но это можно сделать в рекордсете.
я правильно расуждаю? или нет
я серъезно прошу помощи разобраться с рекордсетом. и просто помочь двигаться в нужном направлении при изучении и понимании. так мои рассуждения верны или нет?
программистов среди друзей нет, поэтому жду посильной помощи от вас.
так же вот уже бьюсь с вопросом как из рекордсета данные переписать в физ.таблицу. и как сделать сортировку по рекордсету и вывести отсортированные данные в рекордсет. (по второму вопросу пока помощи не надо,так как еще не приступал к изучению его. видел темы на форму попробую пока опираться на них. )

  Ответить  
 
 автор: krusz   (12.08.2011 в 09:21)   личное сообщение
 
 

  Ответить  
 
 автор: snipe   (12.08.2011 в 10:24)   личное сообщение
 
 

я сам еще многого не понимаю
выгружать в таблу не нужно - рекордсет ведь к ней привязан (или к запросу)
просто редактируете (там команды специальные есть ) и все

если же табла пустая и нужно туда сгрузить рекордсет то открыть второй рекордсет(пустой таблы)
и в цикле из первого выгружать а во втором добавлять записи
когда цикл отработает таблица будет заполнена

а вы что напрямую с таблами работаете - без форм?
если это так - то вам нужно срочно заняться изучением форм
может многие вопросы отпадут

  Ответить  
 
 автор: osmor   (12.08.2011 в 11:40)   личное сообщение
 
 

в том варианте который подсказал Анатолий, данные будут браться из таблицы другой базы, и рекордсет вам не нужен.
про остальные вопросы нужно более подробно, т.к. решение зависит от конкретики задачи.

  Ответить  
 
 автор: Krusz   (12.08.2011 в 12:44)   личное сообщение
 
 

пока конкретной задачи нет. я просто пытаюсь разобраться как это работает и как это делается.
скажем так я с циклом что то даже не могу разобраться.
вро дебы цкил сделал, пробежался по рекордсету, количество записей получил. а вот дальше выкинуть в листбокс еще разобрался, а выкинуть скажем просто в поле (вид формы не важен сейчас.) не получается, у меня в поле выводит либо первую запись либо последнюю, а так что бы все записи не получается ( к примеру хочу форму сделать в табличном виде, и в таблице вывсети все строки)

  Ответить  
 
 автор: kot_k_k   (12.08.2011 в 13:02)   личное сообщение
 
 

форма как и поле имеет свой RecordSourse (Свойство формы - Закладка "Данные" - Источник записей) - к ней привязываем таблу или запрос (SQL строка) - тогда появятся все записи.

  Ответить  
 
 автор: snipe   (12.08.2011 в 13:02)   личное сообщение
 
 

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 свойства ресордсета ) - но об этом сам почитаешь

  Ответить  
 
 автор: kot_k_k   (12.08.2011 в 13:07)   личное сообщение
 
 

по поводу разобраться как работает - открываем Борей и в режиме конструктора смотрим что и как

  Ответить  
 
 автор: Krusz   (12.08.2011 в 14:12)   личное сообщение
 
 

так и делаю, еще вон русский help скачал и несколько ссылок на VBA , DAO, SQL и т.д в избранных

  Ответить  
 
 автор: Krusz   (12.08.2011 в 14:45)   личное сообщение
 
 

а вообще есть потребность данные из рекордсета как то выгрузить просто в экселевскую таблицу и сохранить. данные уже находятся в том виде в котором надо.
они выгружаются из другой базы отфильтрованные и отсортированные , они у меня показываются в листбоксе (вид полностью устраивает) , но надо сохранить в экселе.

пытаюсь сделать через
DoCmd.OutputTo acOutputTable, ("tabl"), , , True

но для этого нужна сохраненная таблица, вот ее хочу сделать как времянной и загружать данные из рекордсета (котрые считаны), выгружать в эксель, потом из этой таблы их удалять.

  Ответить  
 
 автор: osmor   (12.08.2011 в 15:39)   личное сообщение
 
 

рекордсет можно сохранить в excel создав объект excel с помощью createobject и метода copyfromrecordset объекта range excel
http://hiprog.com/index.php?option=com_content&task=view&id=429

  Ответить  
 
 автор: Krusz   (12.08.2011 в 16:48)   личное сообщение
 
 

пропробовал, объект exel открылся, а вот на строчке copyfromrecordset выдает ошибку

"Run-time error '438'"
"Object doesn't support this property or method"

скорее всего я не подключил библиотеку?
если да ее можно подключать программно?

  Ответить  
 
 автор: osmor   (12.08.2011 в 17:40)   личное сообщение
 
 

ничего подключить не нужно. вероятнее всего вы вызываете метод не у того объекта
код покажите

  Ответить  
 
 автор: Krusz   (15.08.2011 в 08:27)   личное сообщение
 
 

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 - это рекордсет который я и хочу выгрузить

  Ответить  
 
 автор: Krusz   (15.08.2011 в 10:19)   личное сообщение
 
 

переписал код в таком виде и все заработало.
правдо я не совсем понял что делает каждая строчка. сможете пояснить?
и еще один момент так как не совсем все понял, можно сделать так чтобы и заголовки столбцов копировались в 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

  Ответить  
 
 автор: osmor   (15.08.2011 в 13:41)   личное сообщение
 
 

и еще один момент так как не совсем все понял, можно сделать так чтобы и заголовки столбцов копировались в 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

  Ответить  
 
 автор: snipe   (15.08.2011 в 13:44)   личное сообщение
 
 

если сделаете заголовки
то выгружать надо не в первую строку а во вторую (в первой у вас будут заголовки)
вот так
ws.Cells(2, 1).CopyFromRecordset RST

  Ответить  
 
 автор: krusz   (15.08.2011 в 20:21)   личное сообщение
 
 

спасибо всем. не успел отписаться ранее с заголовками разобрался. но вот не понял почему первый вариант не работает, что я там не дописал?

  Ответить  
 
 автор: snipe   (16.08.2011 в 03:29)   личное сообщение
 
 

открыли ексель без чистого листа

  Ответить  
 
 автор: Krusz   (18.08.2011 в 09:02)   личное сообщение
 
 

Добрый день.
спасибо за подсказки, все заработало. но есть один не понятный для меня момент.
на 8 компах работает нормально, Ексель запускается, все копируется и форматируется.
а на одном компе ексель почему то даже не открывается. почему не могу понять, думал что нибудь в настройках безопасности - сделал самый низкий уровнь но не помогло

  Ответить  
 
 автор: snipe   (18.08.2011 в 09:26)   личное сообщение
 
 

на неправильном компе какой офис стоит
и какой офис на правильных

возможно что ссылка идет на офис 2003 а установлен офис 2007

  Ответить  
 
 автор: krusz   (18.08.2011 в 10:21)   личное сообщение
 
 

везде 2007

  Ответить  
 
 автор: kot_k_k   (12.08.2011 в 15:44)   личное сообщение
 
 


а вообще есть потребность данные из рекордсета как то выгрузить просто в экселевскую таблицу и сохранить.



В Екселе есть закладка Данные - там импорт из кучи разных мест в том числе из Акса - можно любой запрос, таблу открыть из Екселя и далее обработать как хочешь.
Для сводных таблиц, например, Ексель удобнее.

  Ответить  
 
 автор: Krusz   (12.08.2011 в 17:16)   личное сообщение
 
 

у меня таблицы ежемесячно формируются с количеством записей более 2 500 000 строк (записей) и в них столбцов штук 10.
выгружать их в ексель и обрабатывать не резон.
вот с помощью запросов я выбираю нужные записи из отдельного файла (получается от 500 до 1000 строк) и их уже хочу выгружать в ексел

  Ответить  
 
 автор: kot_k_k   (12.08.2011 в 17:21)   личное сообщение
 
 

Ексель может брать SQL строку (твой запрос который формируется в Аксе) и загонять автоматом его в себю.

при работе мастера тебе предлагается выбрать объект для импорта и там перечень таблиц и запросов твоей базы.

где-то в болталке выкладывали ссылку на видео по этому делу там еще DataMiding (как-то так) поищи

  Ответить  
 
 автор: Krusz   (12.08.2011 в 14:21)   личное сообщение
 
 

спасибо за разъяснения. с самими циклами все понятно (разновидностями и их условиями), а вот с телом цикла как то у меня не залдилось. еще раз спасибо.

пошел дальше грызть... дырки

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList