Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: INSERT Добавлено: 03.09.10 19:05  

Автор вопроса:  goodwen
Здравствуйте, я пишу на vb6, у меня есть база данных в виде файла Excel подключённая к приложению через ADO,

Adodc1.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=DSN=Excel Files;DBQ=" & App.Path & "\meta-baza.xls;DefaultDir" & App.Path & ";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"

Сама база состоит так, на первом листе, который назван imj есть два столбца Slovo и Meta-Obj. И уже в рабочем приложение я должен ввести в TextBox какое либо слово, и оно должно добавиться к тем данным которые уже есть в столбце Meta-Obj. Я использую оператор Insert:

a=text1.text
Adodc1.RecordSource = "INSERT INTO [imj$] ([Meta-Obj]) VALUES('" & a & "')"
Adodc1.Refresh

Здесь [imj$] имя всего листа, Meta-Obj название столбца.
Запускаю, нажимаю на кнопку, где всё прописано и выдаёт ошибку:ADODС1: операция не допускается, если объект закрыт. А затем пишет: Ошибка во время выполнения программы '3704'.
Как сделать чтоб заработало?

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #1 Добавлено: 05.09.10 18:17
Мне тут упомянули, что это можно исправить с помощью Ado.command, если кто может помочь, подскажите, как это сделать?

Ответить

Номер ответа: 2
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #2 Добавлено: 06.09.10 01:19
INSERT INTO не возврашает записей, поэтому рекордсет закрыт

  1.  
  2. Dim conn As New ADODB.Connection
  3. conn.ConnectionString = "Provider=... <br>
  4. conn.Execute ("INSERT INTO ... <br>

Ответить

Номер ответа: 3
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #3 Добавлено: 06.09.10 21:27
Eugy, я добавил в код:
  1.  
  2. Dim conn As New ADODB.Connection
  3. conn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=DSN=Excel Files;DBQ=" & App.Path & "\meta-baza.xls;DefaultDir" & App.Path & ";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
  4. conn.Execute ("INSERT INTO [imj$] ([Meta-Obj]) VALUES('" & a(i) & "')")


 Запускаю и выдаёт ошибку: "Операция не допускается если объект закрыт". Как мне это исправить?

Ответить

Номер ответа: 4
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #4 Добавлено: 06.09.10 21:32
Eugy, всё вроде заработало, добавил:
  1. conn.Open

Спасибо за помощь.

Ответить

Номер ответа: 5
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #5 Добавлено: 06.09.10 21:38
Eugy, я ещё только не могу разобраться, как закрыть, у меня там есть кнопка, при нажатии на неё закрывается приложение и открывается Excel файл с базой данных, вот такой код:
  1.  
  2. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  3. Unload Me
  4. ShellExecute 0&, "open", App.Path & "\meta-baza.xls", 0&, 0&, 1


и при открытии файла пишет, что файл либо повреждён, либо к нему нет доступа, это видимо из-за того. Пишу:
  1. conn.Close

не помогает, как мне это исправить?

Ответить

Номер ответа: 6
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #6 Добавлено: 06.09.10 22:20
Значит элемент adodc еще держит соединение. Освободи.

Ответить

Номер ответа: 7
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #7 Добавлено: 07.09.10 13:33
Eugy, напишешь как это сделать? А то у меня не получается.

Ответить

Номер ответа: 8
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #8 Добавлено: 08.09.10 05:54
Set Adodc1.Recordset = Nothing
И вообще, выкини его, только место занимает.
  1. Private conn As ADODB.Connection
  2. Private Sub Form_Load()
  3.     Set conn = New ADODB.Connection
  4.     conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=35;Data Source=" & "D:\книга1.xls"
  5.     conn.CursorLocation = adUseClient
  6.     conn.Open
  7.     'Set MSHFlexGrid1.Recordset = conn.Execute("SELECT * FROM ...
  8.     'conn.Execute "INSERT INTO ...
  9. End Sub
  10. Private Sub Form_Unload(Cancel As Integer)
  11.     'Set Adodc1.Recordset = Nothing
  12.     conn.Close
  13.     Set conn = Nothing
  14.     Shell "C:\Program Files\Microsoft Office\OFFICE11\excel D:\книга1.xls", vbNormalFocus
  15. End Sub

Ответить

Номер ответа: 9
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #9 Добавлено: 08.09.10 10:49
Eugy, Спасибо.

Ответить

Номер ответа: 10
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #10 Добавлено: 29.09.10 14:09
Eugy, У меня тут небольшой вопрос появился, Вы мне с начала написали:
  1. Dim conn As New ADODB.Connection

А затем, что лучше ado вообще удалить с формы и прописать:
  1. Private conn As ADODB.Connection

Я заметил, что если в новом проекте так сделать, написать второй вариант и при этом не добавлять ado, то запускаться не будет, а если всё же добавить, запустить, а потом удалить его и снова запустить тогда работает. Так вот, я оставил на всякий случай ado на форме, перетаскиваю на другой компьютер, там VB6 установлен, но при запуске пишет, что нету файла MSADODC.OCX, неможет это быть связано? Вопрос скорее всего глупой но всё же интересно.

Ответить

Номер ответа: 11
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #11 Добавлено: 30.09.10 01:39
MSADODC.OCX тебе не нужен, гарантирую.
Просто при добавлении его в проект неявно для тебя добавляется также ссылка на библиотеку Microsoft ActiveX Data Object 2.X Library. Избавься от не нужного тебе элемента, а ссылку на библу выстави вручную.

Ответить

Номер ответа: 12
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #12 Добавлено: 30.09.10 14:15
Eugy, Спасибо за помощь.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам