Nelze provést Insert, Delete VBA/Excel, ADO – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nelze provést Insert, Delete VBA/Excel, ADO – MS SQL – Fórum – Programujte.comNelze provést Insert, Delete VBA/Excel, ADO – MS SQL – Fórum – Programujte.com

 

Jiří
~ Anonymní uživatel
57 příspěvků
14. 6. 2012   #1
-
0
-

Zdravím,

přes ADO načítám do excelu data z SQL databáze - vše (Select) bez problémů. Problém nastává v okamžiku, kdy se pokusím databázi změnit Insert into, Delete. Pokud použiji externí program pro práci s databází, je vše bez problémů, tzn. mám dostatečná oprávnění pro změny v databázi apod. V uvedeném příkladu projde Select, Insert ani Delete ne...

Díky za nápady...

JB

    Public LinkID As ADODB.Connection
    Public QueryID As ADODB.Recordset
    Private Record() As String
    Public Row As Long
    Public NumRows As Long
    Public Function connect(Optional server As String = "", Optional uid As String = "", Optional pwd As String = "", _
        Optional dbname As String = "") As Boolean
        Dim connStr As String
        If (server = "") Then server = "DBServer"
        If (uid = "") Then uid = "User1"
        If (pwd = "") Then pwd = "1234"
        If (dbname = "") Then dbname = "Database1"
        If (uid = "") Then
            connStr = "DRIVER={SQL Server};SERVER=" & server & ";Trusted_Connection=Yes;APP=Office 2007 App;DATABASE=" & dbname
        Else
            'connStr = "DRIVER={SQL Server};SERVER=" & server & ";UID=" & uid & ";PWD=" & pwd & ";APP=Office 2007 App;DATABASE=" & dbname
            connStr = "Provider=SqlOleDb;Data Source=DBServer;Initial Catalog = Database1;UID=" & uid & ";PWD=" & pwd & ";Options=-1;"
        End If
        If (LinkID Is Nothing) Then
            Set LinkID = New ADODB.Connection
            On Error Resume Next
            LinkID.Open connStr
            On Error GoTo 0
            If (LinkID.State = 0) Then
                ErrorNo = Err.Number
                ErrorTxt = Err.Description
            End If
        End If
        connect = LinkID.State
    End Function
    Public Function query(Optional queryStr As String = "") As Boolean
        If (queryStr = "") Then Exit Function
        If Not (connect) Then Exit Function
        If (QueryID Is Nothing) Then
            Set QueryID = New ADODB.Recordset
        ElseIf (QueryID.State) Then
            free_result
        End If
        On Error Resume Next
        QueryID.Open queryStr, LinkID, adOpenForwardOnly, adLockOptimistic, -1 ', adLockBatchOptimistic
        On Error GoTo 0
        Row = 0
        If (QueryID.State = 0) Then
            ErrorNo = Err.Number
            ErrorTxt = Err.Description
        End If
        NumRows = count_records
        query = QueryID.State
    End Function
    Public Sub free_result()
        If Not (QueryID Is Nothing) Then
            QueryID.Close
        End If
    End Sub
    Public Function count_records() As Integer
        count_records = 0
        If Not (QueryID Is Nothing) Then
            If (QueryID.State) Then
                While (Not QueryID.EOF)
                    count_records = count_records + 1
                    QueryID.MoveNext
                Wend
                If (count_records) Then
                    QueryID.Requery
                End If
            End If
        End If
    End Function
    Sub Test()
        query "SELECT * FROM Table1 WHERE Empl = 'Tom'"
        query "INSERT INTO Table1 (EMPL)Values ('Tod')"
        query "DELETE FROM Table1 WHERE Empl = 'Tod'"
    End Sub
Nahlásit jako SPAM
IP: 81.200.62.–
Zed_10
Newbie
14. 6. 2012   #2
-
+1
-
Zajímavé

Zdravím,

myslím že by to mohlo být tím že používáš recordset s parametrem commandText.

Radši používám objekt ADOBD.Command 

Dim oCmd As New ADODB.Command

 Pro insert a delete bych to řešil takto

With oCmd
        .ActiveConnection = LinkID

        .CommandText = queryStr      
        .CommandType = adCmdText
        .Execute
End With

Nahlásit jako SPAM
IP: 81.30.240.–
Jiří
~ Anonymní uživatel
57 příspěvků
14. 6. 2012   #3
-
0
-

#2 Zed_1
nemohlo by, je :-)

Blbce stačí postrčit, dík

Nahlásit jako SPAM
IP: 81.200.62.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

VBA Excel do .exe — založil Sentir

Excel VBA SetFocus — založil KECOnaj

Pomoc VBA EXCEL — založil Zbyšek

Pole ve VBA Excel — založil Daemon481

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý