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

Форум: MS ACCESS

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

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

 
 

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

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

тема: ODBC postgresSQL и ACCESS
 
 автор: АлаяЗаря   (27.05.2010 в 00:02)   личное сообщение
 
 

Доброго времени суток =) еще раз выражаю благодарность всем Вам за помощь в познаниях в Access (начинал с нуля) =) ну так вот:

Разобрался я с SQLServer 2000 все круто, я доволен, но тут появилась новая задача... Вкраце изложу ситуацию

Имеется так называемая "Горячая линия", которая сидит на моей БД, т.е. на аксе, а теперь еще имеется веб-сервер, который сидит на PostgreSQL и вот это веб-сервер собирает необходимую статистическую информацию, которая ну очень как нужна "горячей линии".

Что я хочу:

Конектиться к PostgreSQL через ODBC в recordset брать нужную мне информацию, ну и дальше с ней работать.... Но, что то почитав хелп, я запутался еще больше чем разобрался...

Загвостка в коннекте, не могу понять через какой метод его написать... Может кто сталкивался, хелпните чем могите =)

  Ответить  
 
 автор: osmor   (27.05.2010 в 08:03)   личное сообщение
 
 

не надо ODBC используйте adodb.recordset и ole db
строка для коннекта
Provider=PostgreSQL OLE DB Provider;Data Source=myServerAddress;location=myDataBase;User ID=myUsername;password=myPassword;timeout=1000;
(взято от сюда http://www.connectionstrings.com/postgre-sql#p53)
Вопрос в совновном с том, есть ли доступ к БД с внешних ip
многие провайдеры, в целях безопасности разрешают доступ к БД только со своих внутренних IP.

  Ответить  
 
 автор: АлаяЗаря   (27.05.2010 в 09:46)   личное сообщение
 
 

Пытаюсь подключиться локально:


Private Function rrrrr()

Dim rst As ADODB.Recordset

rst.Open "select * from reestr", "Provider=PostgreSQL OLE DB Provider;Data Source=127.0.0.1;location=sv2;User ID=postgres;password=1;timeout=1000;"

End Function



пишет object variable or with block variable not set

  Ответить  
 
 автор: osmor   (27.05.2010 в 09:53)   личное сообщение
 
 

Dim rst As ADODB.Recordset
set rst = new ADODB.Recordset
....

  Ответить  
 
 автор: АлаяЗаря   (27.05.2010 в 11:45)   личное сообщение
 
 

ай яй яй =))) спасибо =) буду пробывать =)

  Ответить  
 
 автор: АлаяЗаря   (27.05.2010 в 22:32)   личное сообщение
 
 

так, попробывал, все равно ругается....

вопрос, а какие библиотеки нужны? драйверы? может что не подключил, не поставил?

у меня локально стоит postgreSQL v 8.4, в нем создал БД, таблицу, ввел данные пытаюсь приконектиться....


Private Function connection()

Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset
rst.Open "select * from reestr", "Provider=PostgreSQL for NTC IRS;Data Source=127.0.0.1;location=SV2;User ID=KMO;password=1;timeout=1000;"


End Function


ругается на строчку rst.open, пишет

"Не удается найти указанный поставщик. Вероятно он установлен неправильно"

  Ответить  
 
 автор: АлаяЗаря   (28.05.2010 в 01:41)   личное сообщение
 
 

Получилось =) не чватало драйвера ole db
скачать воть отсюда, мож кому будет нужно

http://2lx.ru/2009/06/c-i-postgresql/

  Ответить  
 
 автор: АлаяЗаря   (08.02.2011 в 11:10)   личное сообщение
 
 

Вернулся к работе с БД....

Вопрос простой, как мне из Postgresql выгрузить таблицу в акс?

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

Что у меня пока получилось это законектиться к БД на постгрессе, а вот что делать дальше не знаю....

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

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

  Ответить  
 
 автор: АлаяЗаря   (08.02.2011 в 11:37)   личное сообщение
 
 

я не могу понять саму технологию процесса....

открываю рекордсет в постгрессе, открываю рекордсет таблицы

ну типа rst.open strselect, conn, где strselect - запрос, а conn - коннект к постгресс
потом set rs = bd.openrecordset ("name table", dbopentable) : rs.index = "Primarykey", где db - моя база

а что дальше?

  Ответить  
 
 автор: Силblч   (08.02.2011 в 11:50)   личное сообщение
 
 

както-так наверное

do while not rst.eof
  rs.addnew
  rs.Fields(имяполя).value=  rst.Fields(имяполя).value
  rs.update
   rst.movenext
loop

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

дальше перемещаетесь по рекордсету из постгрис и добавляете в рекордсет аксес
как-то так
do while not rstPG.eof
         rstMSA.Addnew
         rstMSA.Fields(0) = rstPG.Fields(0)
         rstMSA.Fields(1) = rstPG.Fields(1)
         rstMSA.update
         rstPG.movenext
loop

  Ответить  
 
 автор: АлаяЗаря   (08.02.2011 в 12:12)   личное сообщение
 
 

буду пробывать =) спасибо

  Ответить  
 
 автор: АлаяЗаря   (08.02.2011 в 13:10)   личное сообщение
 
 

Заработало =)))))))))))) прям камень с души =))) спасибо большое.....

маленький вопрос, подсчет строк рекордсета?

и еще потревожу... нужно чтоб рекордсет начинался с определенной строки, не с первой а например с пятой...

  Ответить  
 
 автор: Силblч   (08.02.2011 в 14:04)   личное сообщение
 
 


            zs.MoveLast: zs.MoveFirst
            rc = zs.RecordCount
            If nz(Me.subfrm02.Form.cbxViewRecByPage, "500") = "(Все)" Then
                zs.PageSize = 1000000
            Else
                zs.PageSize = nz(Me.subfrm02.Form.cbxViewRecByPage, 500) '-- 500 поумолчанию
            End If
            zs.AbsolutePage = nz(Me.subfrm02.Form.txtPage, 1)
            Me.subfrm02.Form.txtPages = zs.PageCount
            Me.subfrm02.Form.txtPageInfo = "всего строк " & rc
            SetStatus "Загружаем " & IIf(zs.PageSize < rc, zs.PageSize, rc) & " строк [страница " & zs.AbsolutePage & _
                      " из " & zs.PageCount & "]": DoEvents
            
            Set ps = CopyRecordsetStructure(zs) 'zs.GetRows(zs.PageSize, zs.AbsolutePage)
            ps.CursorLocation = adUseClient
            ps.Open , , adOpenKeyset, adLockOptimistic
            i = 1
            Do While i <= zs.PageSize And Not zs.EOF
                ps.AddNew
                For j = 0 To zs.Fields.Count - 1
                    ps.Fields(j).Value = zs.Fields(j).Value
                Next j
                ps.Update
                i = i + 1
                zs.MoveNext
            Loop

  Ответить  
 
 автор: АлаяЗаря   (08.02.2011 в 23:52)   личное сообщение
 
 


Private Function connection()
Dim rst As ADODB.Recordset
Dim conn As ADODB.connection
Dim bdd As Database
Dim rs As Recordset
Dim strselect As String
Dim strwhere As String
Dim a As String
Dim b As String

Set rst = New ADODB.Recordset
Set conn = New ADODB.connection

conn.Open "Provider=PostgreSQL;Data Source=localhost;location=sotrudniki;User ID=postgres;password=1;"

strselect = "select * from fio"


rst.Open strselect, conn
a = rst.RecordCount ' пишет -1



Set bdd = DBEngine.Workspaces(0).OpenDatabase("D:\connect_be.mdb")
Set rs = bdd.OpenRecordset("fio", dbOpenTable): rs.Index = "PrimaryKey"

Do While Not rst.EOF

rs.AddNew
rs.Fields(1).Value = rst.Fields(1).Value 'rst.Fields(0)name
rs.Fields(2).Value = rst.Fields(0).Value 'rst.Fields(1)fam
rs.Fields(3).Value = rst.Fields(4).Value 'rst.Fields(2)tel
rs.Fields(4).Value = rst.Fields(2).Value 'rst.Fields(3)adres
rs.Fields(5).Value = rst.Fields(3).Value 'rst.Fields(4)ot
rs.Update
rst.MoveNext
Loop

End Function


не получается никак определить количество записей в рекордсете =(

  Ответить  
 
 автор: Explorer   (09.02.2011 в 00:03)   личное сообщение
 
 

некоторые советуют сначала метнуться в конец рекордсета потом в начало и только потом считать рекордкаунт

  Ответить  
 
 автор: АлаяЗаря   (09.02.2011 в 00:27)   личное сообщение
 
 


некоторые советуют сначала метнуться в конец рекордсета потом в начало и только потом считать рекордкаунт




rst.Open strselect, conn
rst.MoveLast: rst.MoveFirst
a = rst.RecordCount


так не работает тоже, поэтому показал всю функцию....

  Ответить  
 
 автор: АлаяЗаря   (09.02.2011 в 08:09)   личное сообщение
 
 

Победил


rst.rst.CursorLocation = 3
rst.Open strselect, conn
a = rst.RecordCount

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