Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

sql / excel - zmienna sql pobierana z tabeli

Gianni_85 19 May 2015 10:53 2871 22
  • #1
    Gianni_85
    Level 6  
    Witajcie,

    Połączyłem sobie excela z sql. To mi troszkę pomogło w pracy natomiast przydałoby mi się jeszcze pobierać wartość zmiennej bezpośrednio z poziomu excela lub inputboxa.

    Wyczytałem, że cos takiego jest mozliwe ale nie wiem jak to zrobić by działało w moim przypadku.

    Dodano po 7 [minuty]:

    Najlepiej jak by dana była pobierana z komórki b1 akrusza1 (aktywnego arkusza)
  • #2
    rufek90
    Level 24  
    Podejrzewam, że musisz sporo tu jeszcze wyjaśnić zanim ktoś pomoże :) Jak połączyłeś? Jak to działa? Wpisujesz zmienną w excelu i gdzie ją chcesz mieć? Może przykładowy arkusz...
  • #3
    Gianni_85
    Level 6  
    Excela połaczyłem z bazą poprzez opcje dostępną z załadki Dane \ Pobieranie danych zewnętrznych \ z innych źródeł \ z programu sql serwer.

    Zapytanie wkleiłem z teskt połączenia.

    W załączniku przesyłam przykłąd jak to mniej więcej u mnie wygląda.

    Chciałbym aby data dodania Użytkownika była równa lub wieksza od tej z komórki b1
  • #4
    Gianni_85
    Level 6  
    Dowiedziałem się, że takie rzeczy sa możliwe w bazach z MySQL wystarczy, wstawić znak ? w zapytanie i pojawia się okno gdzie się określa adres komórki, która ma być zmienną

    Czy ktoś wie jak takie coś osiągnąć w SQL??
  • #5
    marcinj12
    Level 40  
    Z poziomu VBA masz np. taki kod:
    Code: vbscript
    Log in, to see the code
  • #6
    Gianni_85
    Level 6  
    czy do tego makra trzeba podpiąc jakieś biblioteki lub wstawić nazwę serwera dane do logowania do bazy?

    Co oznacza linijka Range("A2").CopyFromRecordset rst , że dane mają się wklejać od komórki a2?
  • #7
    marcinj12
    Level 40  
    Gianni_85 wrote:
    czy do tego makra trzeba podpiąc jakieś biblioteki
    Tak, najlepiej najnowsze Microsoft ActiveX Data Objects library.
    Gianni_85 wrote:
    lub wstawić nazwę serwera dane do logowania do bazy?
    No raczej. :) Dane do logowania to zależy od wybranego sposobu autoryzacji - poszukaj na necie odpowiedniego connection stringa.
    Gianni_85 wrote:
    Co oznacza linijka Range("A2").CopyFromRecordset rst , że dane mają się wklejać od komórki a2?
    Tak.
  • #8
    Gianni_85
    Level 6  
    Mam wrażenie, że zrobiłem wszystko.po wklejeniu kodu i uruchomeniu makra mam komunikat o błędzie "object required".
  • #10
    Gianni_85
    Level 6  
    bład wyskakuje na linijce z con.Open
  • Helpful post
    #11
    marcinj12
    Level 40  
    conn.Open - przez dwa N?
    Dodałeś referencję przez Tools->References Microsoft ActiveX Data Objects 6.0 Library (albo coś o podobnym numerze?)
    Jeśli tak, to upewnij się co do nazwy serwera, bazy danych, sposobu autoryzacji... Skoro masz działającą kwerendę z poziomu Excela, to we właściwościach połączenia tej kwerendy na zakładce Definicja masz całego connection stringa. Spróbuj go skopiować do makra w całości. Potem możesz po kawałku pousuwać zbędne jego fragmenty.
  • #12
    Gianni_85
    Level 6  
    Dodałem bibliotekę Microsoft ActiveX Data Objects 6.1 Library

    W makro wkleiłem całe paramtry połączenia i dalej zatrzymuje się na tej samej linijce.
  • Helpful post
    #13
    marcinj12
    Level 40  
    Cóż, to obawiam się że więcej nie jestem w stanie zdalnie pomóc... Ograniczę się do stwierdzenia, że "u mnie działa" ;)
  • #15
    Gianni_85
    Level 6  
    czy ten tekst z parametrów połączenia definiuje też logowanie do bazy danych? loguje się domenowo czy w tych parametrach są dane do logowania?
  • #16
    PRL
    Level 40  
    Cóż, to obawiam się że więcej nie jestem w stanie zdalnie pomóc... Ograniczę się do stwierdzenia, że "u mnie działa" ;)

    Prościej już nie potrafię.
    W arkuszu 'Parametry' masz wszystkie potrzebne dane.

    Czego, z tego jasnego opisu, nie rozumiesz?
    Jakie logowanie do domeny???

    A jednak wkradł się błąd.
    Code: vbscript
    Log in, to see the code
  • #17
    Gianni_85
    Level 6  
    Panowie coś się ruszyło w temacie. Zacząłem otrzymywać nowy błąd.
    błąd pojawił się na linijce rst.Open P.Range("B5").

    komunikat "argumenty są niewłaściwego typu, wykraczaja poza dopuszczalny zakres lub są ze sobą w konflikcie.

    linijkę kodu "conn.ConnectionString" zamiełem na cały teskt z parametrów połączenia.

    A pobieram dane narazie z takiego zapytania select * from clients
  • #18
    PRL
    Level 40  
    To ja popełniłem błąd.

    Nie spojrzałeś do postu z poprawką...

    Powinno być: rst.Open P.Range("B5").Value

    Ile masz rekordów w tabeli 'clients'?
  • #19
    Gianni_85
    Level 6  
    WOW!! Super działa. pobieram dane :))

    Już zacząłem się bawić w tworzenie zapytań i odrazu już powił się u mnie kłopot :/

    zrobiłem proste zapytanie zapomoca funkcji
    select c.clientid,c.cname from clients c where c.cdisabled =1

    formuła w excel wygląda tak ZŁĄCZ.TEKSTY("select ";"c.clientid,";"c.cname";" ";"from ";"clients c";" ";"where";" ";"c.cdisabled =";JEŻELI(Import!$D$3="tak";1;0))

    Po wklejeniu samego tekstu do sql management pokazuje sie wynik natomiast excel znowu zwraca błąd "argumenty są niewłaściwego typu, wykraczaja poza dopuszczalny zakres lub są ze sobą w konflikcie.
  • Helpful post
    #20
    PRL
    Level 40  
    select c.clientid,c.cname from clients c where c.cdisabled =0

    Popatrz, gdzie zrobiłeś błąd.

    P.S. Dlaczego łączysz teksty?
  • #21
    Gianni_85
    Level 6  
    łacze teskty by wprowadzac zmienne do zapytania. Masz inny pomysł jak to zrobić?

    Dodano po 2 [minuty]:

    już wiem. Ciapa ze mnie. zapytanie jest pobierane z b1 a ja wpisałem je inną komórkę :)

    i śmiga :)

    Dodano po 8 [minuty]:

    Mogę mieć jeszcze jedną prośbę odnośnie tego zadania.

    Chodzi o skasowanie pobranych danych do arkusza przed kolejnym pobraniem danych.
  • #22
    PRL
    Level 40  
    Włącz nagrywanie makra, zaznacz cały arkusz, naciśnij delete i zatrzymaj nagrywanie makra, a zauważysz:

    Code: vbscript
    Log in, to see the code
    ;)

    Proszę nacisnąć pomógł nie tylko mnie, a przede wszystkim Marcinowi. To jego był kod...:)
  • #23
    Gianni_85
    Level 6  
    Code: vbscript
    Log in, to see the code


    Czy ten kod zadziała jak będe miał więcej akruszy z pobranymi danymi. czy do range trzeba dopisac nazwę arkusza jęzeli mam dopisać do tego arkusz w którym mają sie usunąć dane to składnie będzie taka

    Sheets("nazwa akrusza").Range("A10") czy excel będzie na tyle mądry, że bedzie wiedział z jakiego arkusza ma usuwac dane?