vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 26 kwietnia 2025 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

FB, SQL i Excel


otwartyotwarty rozpoczął: erawis postów: 18



napisał: jalamas
postów: 316


umieszczony:
9 lutego 2007
07:57

edytowany:
9 lutego 2007
08:03

  
Cytat:

nikt tak nie robi
to sie posypie


Trudno dyskutować z takimi argumentami, bo 1-szy nie jest prawdą, a 2-gi nie jest argumentem.
Nie można dać takiej gwarancji, jak nie można powiedzieć człowiekowi, że jego cudowne audi się nie zepsuje...

Sam Excel jest przystosowany do pracy z SQL, że tak symbolicznie napiszę, patrz QueryTables, oraz XLODBC.XLA.

Wystarczy wykonać Query do FireBird nagrywając makro i podejrzeć kod, co widzimy,
gdy się w niego wpatrzymy co widzimy ..... ?

Akurat a nie bardzo kocham QueryTables wolę bezpośrednio ADO.

Jedynie bug Billa utrudnia pracę, bo nie można tegoż zastosować do otwartego skoroszytu czy skoroszytu z hasłem.

Wspomnę o takich hasłach w Excelu jak:
- importuj dane
- kwerenda bazy danych
czy samo Microsoft Query.

Jedynie można byłoby z prostych rozwiązań rozpatrzyć sprawę stosowania zamiast Firebird, bazy danych Access (same tabele+ uprawnienia) lecz to raczej jedynie w sieci lokalnej.
No i nie znam Firebirda, jak już wspomniałam, nie wczytywałam się, lecz zapewne ma on lepszy system zabezpieczeń niż Acc.

Lecz skoro umiałeś napisać aplikację współpracującą z FireBird,
to dla ćwiczenia przełożenie na ACC ( w celach porónawczych) jest bardzo proste.
Lecz nie wiem czy warto.

Trudno mi tutaj ferować wyroki (jak tym innym), mogę powiedzieć, że najpoważniejszym argumentem "za" Twojej aplikacji jest to, że ONA CHODZI I JEST UŻYTECZNA.
I to słowo chodzi w mojej firmie i moim środowisku jest najważniejsze.
Bo zawsze można daną aplikację napisać lepiej inaczej,
i taka jest kolej rzeczy dla prawie każdej z nich,
zazwyczaj sami to robimy, lecz czas i forsa...

A co do "kobietą", to dodatkowo nie tylko inni, lecz praktycznie każdy facet ma prawo podważać moje racje,
więc tego udowadniania mam trochę więcej,
lecz ćwiczenie czyni mistrza ....
napisał: erawis
postów: 9


umieszczony:
8 lutego 2007
20:55

  
Dlaczego Firebird ? - bo darmowy i troche go znam.
Moja aplikacja pracuje naprawdę (sam jestem zdziwiony) bardzo stabilnie.
Inne narzędzia ? Tak ale dodatkowy koszt który wolę ja zainkasować niż wydać na oprogramowanie, pozatym wymyśliłem sobie takie coś :
Firma posiada ogromne ilości plików xls, (niektóre to formularze, inne to pliki z danymi) wystarczy wczytać do bazy :
- formuły
- formatowanie arkusza / czcionki, szerokości kolumn itp/
Wystarczy później dać userowi możliwość wyboru : na którym formularzu chce pracować i wczytać mu go.

I to zaczyna działać.

Ale pojawili się ONI z argumentem :
- nikt tak nie robi
- to sie posypie

A ja nie mam kontrargumentów.

A co do "jesteśmy kobietą" to ;)
napisał: jalamas
postów: 316


umieszczony:
8 lutego 2007
20:25

edytowany:
8 lutego 2007
20:34

  
Uzasadnij dlaczego Firebird ?
znajomi - to znamy "jeteśmy kobietą", mamy nawet gorzej....
Każda 1-sza aplikacja (i nie tylko 1-sza , 1-sza nas tylko płoszy w takiej sytuacji ) się wysypuje.

A w ogóle nawet Bill musi dawać poprawki...

Trzeba zrobić taką obsługę błędów z logami, by wiedzieć z jakiej procedury i może u jakiego usera i kiedy i jaki błąd...
To raczej standard, ale myślę, że to przewidziałeś ?

Zwykle człowiek mialby ochotę powiedzieć tym ludziom zróbcie to lepiej, lecz ...
Możę dobrze byłoby bardzo grzecznie zapytać szefa o argumenty tych ludzia, ale nie namawiam... nie znam układów, wsio ma swoje granice czyż nie ?

Być moze oni mają swoich znajomych i oni chceliby zarobić, to jest częsta przyczyna...
napisał: erawis
postów: 9


umieszczony:
8 lutego 2007
20:19

  
Cytat:
Nie rozumiem co znaczy "poważnych", ale na przykład do pobrania danych do Excela
- z tabel baz danych,
- plików tekstowych,
- czy innych plików Excela....
tam gdzie nie wymaga to i nie ma potrzeby pisac aplikacji.

Jeśli sceptycznie się zapatrują może powinni Ci polecić napisanie całej aplikacji w innym narzędziu...
Przede wszystkim nalezy określić cel i stosownie do tego wybrac narzędzie.
No i trzeba brać pod uwagę możliwości i wiedzę progamisty (czy zespołu) oraz posiadane licencje na narzędzia......
Lub zmianę programisty .... jeśli nie potrafi..

Celu raczej nie podałeś ....

Fajnie,
Trafiłem do poważnej firmy gdzie podstawowym narzędziem jest EXCEL.
Ilość plików jest ogromna....
Taki za..prz że ludzie z pustymi taczkami biegają.
Napisałem aplikacje VBA + Excel + Firebird - Tworzenie kart technologicznych na produkcje pewnego wyrobu z rysunkami technicznymi, pdf i takie tam, i działa od 3 m-cy bez zarzutu.
Ale w firmie pojawili się ludzie tzw. "guru/znajomi szefa" z opinią to sie wysypie.
W moim kręgu na słowa : SQL, EXCEL, VBa - każdy się poddaje.
Szukam więc argumentów ZA
napisał: jalamas
postów: 316


umieszczony:
8 lutego 2007
19:50

edytowany:
8 lutego 2007
19:55

  
Nie rozumiem co znaczy "poważnych", ale na przykład do pobrania danych do Excela
- z tabel baz danych,
- plików tekstowych,
- czy innych plików Excela....
tam gdzie nie wymaga to i nie ma potrzeby pisac aplikacji.

Jeśli sceptycznie się zapatrują może powinni Ci polecić napisanie całej aplikacji w innym narzędziu...
Przede wszystkim nalezy określić cel i stosownie do tego wybrac narzędzie.
No i trzeba brać pod uwagę możliwości i wiedzę progamisty (czy zespołu) oraz posiadane licencje na narzędzia......
Lub zmianę programisty .... jeśli nie potrafi..

Celu raczej nie podałeś ....
napisał: erawis
postów: 9


umieszczony:
8 lutego 2007
19:24

  
Witam
Dziękuje jamalas. O to mi chodziło.
A swoją drogą : do jakich "poważnych" zadań stosujecie SQL + VBA/Excel ?
Pytam bo zaprzyjeźnieni "guru" mojego szefa sceptycznie opiniują taki układ.

Pozdrawiam.
napisał: jalamas
postów: 316


umieszczony:
4 lutego 2007
23:15

edytowany:
4 lutego 2007
23:17

  
Z tą karencją to dobry pomysł, jeśli nie ma innej metody, chociaż ja bym wysyłała z mniejszym opóźnieniem,
a poprawionych po tym czasie już nie.
napisał: admin
postów: 613


umieszczony:
4 lutego 2007
22:36

  
Cytat:

Panie Adminie, co z tego, że można edytować posty skoro i tak poprzedni śmietnik rozsyłasz....


Pani jamalas!
Nie ja rozsyłam, tylko Pan mailer rozsyła, to co dostanie w swoje łapki.
Jak dostaje jednego posta od Pani to wysyła. Jak post Pani poprawia to wysyła. Psotnik.
Chyba będę musiał wprowadzić na przykład 1-godzinną karencję na wysyłkę maili.
Hm. Pozdrawiam.
napisał: jalamas
postów: 316


umieszczony:
4 lutego 2007
20:16

edytowany:
4 lutego 2007
20:54

  
Piszę to celowo w innym poście.

W bazie danych nie powinno się przechowywać obrazków itp...
Jedynie linki... i to względne...
Proszę poczytać opinie na sieci...

Panie Adminie, co z tego, że można edytować posty skoro i tak poprzedni śmietnik rozsyłasz....
napisał: jalamas
postów: 316


umieszczony:
4 lutego 2007
20:06

edytowany:
4 lutego 2007
20:13

  
Nie znam FireBirda, lecz zainstalowałam sobie server w wersji 1.5, oraz IBOConsole, jeśli masz info o lepszym podaj...
- tabela
CREATE TABLE "tblmoja"
(
"id_cos" INTEGER NOT NULL,
"plik_nazwa" VARCHAR(254),
"plik_size" INTEGER,
"plik_blob" BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
CONSTRAINT "PK_tblmoja" PRIMARY KEY ("id_cos")
);

- mojeID, szukam max, bo nie wiem jak jest autoincrement w Firebird, generator chyba trzeba ?
- chodzi dla jpg i bmp
- BEZ DSN, bo nie lubię mieć związanych rąk
- do fRD trzeba taką obsługę błędów jak fncWriteBLOB (Close handle do pliku ...) zapomniałam.

Public Const BlockSize = 32768  'This size can be experimented with for performance and reliability.
'http://support.microsoft.com/kb/q185958/
'http://www.borland.pl/tech/interbase.shtml

Sub FireBlobTest1()
' bmp jpg
    On Error GoTo FireBlobTest_Error
    Dim arrBmp() As Byte
    Dim Conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim lngSize As Long
    Dim strSql As String
    Set Conn = New ADODB.Connection
    Conn.ConnectionString = "DRIVER={Firebird/Interbase(r) Driver};" _
                            & "DBNAME=localhost:" _
                            & MojaBaza & ";" _
                            & "UID=" & MyUID _
                            & ";PWD=" & MyPWD
    Conn.CursorLocation = adUseClient
    Conn.Open
    Set rs = New ADODB.Recordset
    ' zapis z pliku na dysku
    strSql = "SELECT * FROM ""tblmoja"" WHERE 1=0"
    With rs
        .Open strSql, Conn, adOpenStatic, adLockOptimistic
        .AddNew
        .Fields("id_cos") = mojeID
        .Fields("plik_nazwa") = MyFileName
        .Update
        lngSize = fRD(MyBmp, rs, "plik_blob")
        .Fields("plik_size") = lngSize
        .Update
    End With
    rs.Close
    ' odczyt to tmp plik
    rs.Open "Select * from ""tblmoja"" WHERE ""id_cos"" =" & CStr(mojeID), Conn
    Call fncWriteBLOB(rs, "plik_blob", MyTmpFile)
    rs.Close
    
    With ThisWorkbook.Worksheets("moj_arkusz")
        .OLEObjects("MojImage").Object.Picture = LoadPicture(MyTmpFile)
    End With

FireBlobTest_Exit:
    On Error Resume Next
    Conn.Close
    Set Conn = Nothing
    Exit Sub
FireBlobTest_Error:
    MsgBox "Błąd - " & Err.Number & vbCrLf & _
           "Opis - " & Err.Description & vbCrLf & _
           "Procedura - " & "FireBlobTest", vbExclamation
    Debug.Print Err.Description
    Resume FireBlobTest_Exit
End Sub



Function fncWriteBLOB(rstTable As ADODB.Recordset, _
                      ByVal strField As String, _
                      ByVal strDestination As String)

Dim intNumBlocks As Integer
Dim intDestFile As Integer
Dim intI As Integer
Dim lngFileLength As Long
Dim lngLeftOver As Long
Dim strFileData As String

    On Error GoTo FncWriteBLOB_Error
    lngFileLength = rstTable(strField).ActualSize
    If lngFileLength = 0 Then
        fncWriteBLOB = 0
        Exit Function
    End If
    intNumBlocks = lngFileLength \ BlockSize
    lngLeftOver = lngFileLength Mod BlockSize
    intDestFile = FreeFile
    Open strDestination For Output As intDestFile
    Close intDestFile
    Open strDestination For Binary As intDestFile
    strFileData = rstTable(strField).GetChunk(lngLeftOver)
    Put intDestFile, , strFileData

    For intI = 1 To intNumBlocks
        strFileData = rstTable(strField).GetChunk((intI - 1) * _
                                                  BlockSize + lngLeftOver) & ""
        Put intDestFile, , strFileData
    Next intI

FncWriteBLOB_Exit:
    On Error Resume Next
    Close intDestFile
    fncWriteBLOB = lngFileLength
    Exit Function
FncWriteBLOB_Error:
    MsgBox "Błąd - " & Err.Number & vbCrLf & _
           "Opis - " & Err.Description & vbCrLf & _
           "Procedura - " & "FncWriteBLOB", vbExclamation
    Resume FncWriteBLOB_Exit
End Function



Function fRD(ByVal PicBmpJpg As String, _
             rs As ADODB.Recordset, _
             ByVal sFld As String) As Long
Dim lngFileLength As Long
Dim lngBlocks As Long
Dim LeftOver As Long
Dim i As Long
Dim ByteData() As Byte
Dim SourceFile As Integer
    SourceFile = FreeFile
    Open PicBmpJpg For Binary Access Read As SourceFile
    lngFileLength = LOF(SourceFile)    ' Get the length of the file.
    Debug.Print "Filelength is " & lngFileLength
    If lngFileLength = 0 Then
        Close SourceFile
        MsgBox PicBmpJpg & " empty or not found."
        Exit Function
    Else
        lngBlocks = lngFileLength / BlockSize
        LeftOver = lngFileLength Mod BlockSize
        ReDim ByteData(LeftOver)
        Get SourceFile, , ByteData()
        rs.Fields(sFld).AppendChunk ByteData()
        ReDim ByteData(BlockSize)
        For i = 1 To lngBlocks
            Get SourceFile, , ByteData()
            rs.Fields(sFld).AppendChunk ByteData()
        Next i
        rs.Update
        Close SourceFile
    End If
    fRD = lngFileLength
End Function


To wszystko trzeba byłoby tak naprawdę z późnym wiązaniem +CreateObject,
bez referencji, a tylko wersję ADO na kompie sprawdzać.

Sorry ale to:
Dim conn As Connection
Dim rs As Recordset

Set conn = New Connection
bez prefixów ADODB to nie jest OK !
Obudzisz sie z ręka w nocniku....
napisał: admin
postów: 613


umieszczony:
4 lutego 2007
09:47

  
Co trzymasz w BLOBie? Tekst czy plik? Jaki plik?
napisał: erawis
postów: 9


umieszczony:
3 lutego 2007
20:32

  
Ja dalej trzymam sie FB 1.5

Ale Jak Z Tym Typem ?
tzn. Jak wczytać bloba ?
Na mojego czuja to ładuje bloba pod zmienną typu ....
????
napisał: erawis
postów: 9


umieszczony:
3 lutego 2007
20:23

  
[quote]Witaj.
[vbcode]
Dim Sql As String
Dim conn As Connection
Dim rs As Recordset

Set conn = New Connection
conn.ConnectionString = "DSN=PROBA"

conn.Open
Sql = "SELECT * FROM BLABLA"
[quote]
Zainstaluj ODBC dla FB.
Wejdz do panelu sterowania i załóż systemowy dsn w sterownikach ODBC.

W parametrach podaj bazę danych, usera i hasło.

nazwij to PRÓBA i spróbuj po mojemu.

Administracja serwisu prosi o poprawienie znaczników [qoute]
Administracja serwisu prosi o poprawienie znaczników [vbcode]
napisał: admin
postów: 613


umieszczony:
3 lutego 2007
19:37

  
Cytat:

FIREBIRDA.


OOOPS! Rzeczywiście.
Znalazłem na sieci to:
conn.ConnectionString = "Driver=Firebird/InterBase(r) driver;UID=SYSDBA;" & _
"PWD=masterkey;DBNAME=C:\Program Files\Firebird\Firebird_2_0\examples\empbuild\EMPLOYEE.FDB;"



..ale nie działa, mimo, że uruchomiłem usługę Firebirda i plik dazy danych istnieje.
Otrzymuję tylko taki komunikat:

[Microsoft][Menedżer sterowników ODBC] Nie można odnaleźć nazwy źródła danych, a nie ma podanego sterownika domyślnego

Pomyślę o tym jutro.
napisał: erawis
postów: 9


umieszczony:
3 lutego 2007
19:17

  
Cytat:
Witamy na liście.

Bardzo ciekawy temat. Chętnie sam mu się przyjrzę, ale napisz mi jak łączysz się z bazą danych z Firefoxa? Jakie argumenty podajesz w do nawiązania połączenia?


FIREBIRDA.
napisał: erawis
postów: 9


umieszczony:
3 lutego 2007
17:57

  
Witaj.
Dim Sql As String
Dim conn As Connection
Dim rs As Recordset

    Set conn = New Connection
        conn.ConnectionString = "DSN=PROBA"

        conn.Open
Sql = "SELECT * FROM BLABLA"
        
        Set rs = conn.Execute(Sql)



Możliwości są naprawde super.
Z poziomu EXCELA zarządzam całą bazą danych.
W FB trzymam userów których odczytuje w trakcie uruchamiania arkuszy itd, itd

Ale co do mojego problemu :
Prawdopodobnie trzeba załadować bloba do nowej zmiennej jakiegoś filetypu ?
Pomóżcie, bo nie za baredzo znam exla.
pozdrawiam.
napisał: admin
postów: 613


umieszczony:
3 lutego 2007
16:47

  
Witamy na liście.

Bardzo ciekawy temat. Chętnie sam mu się przyjrzę, ale napisz mi jak łączysz się z bazą danych z Firefoxa? Jakie argumenty podajesz w do nawiązania połączenia?
napisał: erawis
postów: 9


umieszczony:
3 lutego 2007
14:07

  
Witam po raz pierwszy.
PROBLEM:

jak wczytać z Firebirda i jak pokazać na userformie lub na arkuszu BLOB-a wczytanego z Firebirda ?
pozadrawiam.

Do FB łącze sie przez odbc


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z