|
|
|
| Доброго времени суток =) еще раз выражаю благодарность всем Вам за помощь в познаниях в Access (начинал с нуля) =) ну так вот:
Разобрался я с SQLServer 2000 все круто, я доволен, но тут появилась новая задача... Вкраце изложу ситуацию
Имеется так называемая "Горячая линия", которая сидит на моей БД, т.е. на аксе, а теперь еще имеется веб-сервер, который сидит на PostgreSQL и вот это веб-сервер собирает необходимую статистическую информацию, которая ну очень как нужна "горячей линии".
Что я хочу:
Конектиться к PostgreSQL через ODBC в recordset брать нужную мне информацию, ну и дальше с ней работать.... Но, что то почитав хелп, я запутался еще больше чем разобрался...
Загвостка в коннекте, не могу понять через какой метод его написать... Может кто сталкивался, хелпните чем могите =) | |
|
| |
|
|
|
| не надо 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. | |
|
| |
|
|
|
| Пытаюсь подключиться локально:
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 | |
|
| |
|
|
|
| Dim rst As ADODB.Recordset
set rst = new ADODB.Recordset
.... | |
|
| |
|
|
|
| ай яй яй =))) спасибо =) буду пробывать =) | |
|
| |
|
|
|
| так, попробывал, все равно ругается....
вопрос, а какие библиотеки нужны? драйверы? может что не подключил, не поставил?
у меня локально стоит 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, пишет
"Не удается найти указанный поставщик. Вероятно он установлен неправильно" | |
|
| |
|
|
|
| Получилось =) не чватало драйвера ole db
скачать воть отсюда, мож кому будет нужно
http://2lx.ru/2009/06/c-i-postgresql/ | |
|
| |
|
|
|
| Вернулся к работе с БД....
Вопрос простой, как мне из Postgresql выгрузить таблицу в акс?
Немного предыстории... у меня учетная бд, имеется еще бд на потгресе, для учета нужно брать данные от туда и закладывать ко мне... сейчас это вручную.... но я верю что можно автоматом....
Что у меня пока получилось это законектиться к БД на постгрессе, а вот что делать дальше не знаю.... | |
|
| |
|
|
|
| судя по предыдущим ответам у вас получилось открыть рекордсет
дальше можно этот рекордсет построчно запихнуть в рекордсет открытый по таблице access | |
|
| |
|
|
|
| я не могу понять саму технологию процесса....
открываю рекордсет в постгрессе, открываю рекордсет таблицы
ну типа rst.open strselect, conn, где strselect - запрос, а conn - коннект к постгресс
потом set rs = bd.openrecordset ("name table", dbopentable) : rs.index = "Primarykey", где db - моя база
а что дальше? | |
|
| |
|
|
|
| както-так наверное
do while not rst.eof
rs.addnew
rs.Fields(имяполя).value= rst.Fields(имяполя).value
rs.update
rst.movenext
loop
| | |
|
| |
|
|
|
| дальше перемещаетесь по рекордсету из постгрис и добавляете в рекордсет аксес
как-то так
do while not rstPG.eof
rstMSA.Addnew
rstMSA.Fields(0) = rstPG.Fields(0)
rstMSA.Fields(1) = rstPG.Fields(1)
rstMSA.update
rstPG.movenext
loop
|
| |
|
| |
|
|
|
| буду пробывать =) спасибо | |
|
| |
|
|
|
| Заработало =)))))))))))) прям камень с души =))) спасибо большое.....
маленький вопрос, подсчет строк рекордсета?
и еще потревожу... нужно чтоб рекордсет начинался с определенной строки, не с первой а например с пятой... | |
|
| |
|
|
|
|
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
|
| |
|
| |
|
|
|
|
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
|
не получается никак определить количество записей в рекордсете =( | |
|
| |
|
|
|
| некоторые советуют сначала метнуться в конец рекордсета потом в начало и только потом считать рекордкаунт | |
|
| |
|
|
|
|
некоторые советуют сначала метнуться в конец рекордсета потом в начало и только потом считать рекордкаунт
|
rst.Open strselect, conn
rst.MoveLast: rst.MoveFirst
a = rst.RecordCount
так не работает тоже, поэтому показал всю функцию.... | |
|
| |
|
|
|
| Победил
rst.rst.CursorLocation = 3
rst.Open strselect, conn
a = rst.RecordCount
|
| |
|
| |