Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужен утвердительный ответ / 19 сообщений из 19, страница 1 из 1
14.04.2006, 08:26
    #33666102
SHGulnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Нужен утвердительный ответ устала копаться на форумах.
Подскажите пжл.
Мне поставили задачу
есть база Access
есть приложение VB
в Access в модуле прописана процедура

Public Sub InsertTab1(MyTable As String, pN1 As String, pN2 As String)
On Error GoTo pEnd
Dim MySQL As String
MySQL = "INSERT INTO " & MyTable & _
" (naimr, naimk)" & _
" VALUES ('" & pN1 & "', '" & pN2 & "')"

DoCmd.SetWarnings False
DoCmd.RunSQL MySQL
Exit Sub
pEnd:
Exit Sub
End Sub

Моя задача в VB
передать параметры и запустить эту процедуру.
То что можно использовать с параметрами запросы я знаю

Типа

PARAMETERS [@naimr] Text ( 255 ), [@naimk] Text ( 255 );
INSERT INTO spogr ( naimr, naimk )
SELECT [@naimr] AS Выражение1, [@naimk] AS Выражение2;

Но этот вариант моего шефа не устраивает.

Подскажите мою задачу можно решить или нет?
...
Рейтинг: 0 / 0
14.04.2006, 08:45
    #33666121
AndreyF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
SHGulnurМоя задача в VB
передать параметры и запустить эту процедуру.
То что можно использовать с параметрами запросы я знаю

Э-эх...
Зарываться в Help/книжки и читать про

ADODB.Connection
ADODB.Command
ADODB.Execute
ADODB.Recordset
ADODB.Parameters

P.S Help на эту тему даже в Access-e есть.
...
Рейтинг: 0 / 0
14.04.2006, 08:45
    #33666122
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
не очень понял что хочет ваш шеф но в VB выглядет примерно так ваш код

Private Sub Insert(MyTable As String, pN1 As String, pN2 As String)
Dim con As New ADODB.Connection
Dim com As New ADODB.Command
Dim dbfile As String
Dim strSQL As String

dbfile = "c:\mydb.mdb"
con.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & dbfile & ";Uid=Admin;Pwd=;" 'ODBC соединенеие


strSQL = "INSERT INTO " & MyTable & _
" (naimr, naimk)" & _
" VALUES ('" & pN1 & "', '" & pN2 & "')"



With com
.ActiveConnection = con
.CommandText = strSQL
.Execute
End With

End Sub

Можно какже создать комманд в DataEnvironment с параметрами и вызывать в процедуре с присвоениями параметров
...
Рейтинг: 0 / 0
14.04.2006, 08:48
    #33666128
SHGulnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Да нет? это процедура должна быть в модуле Access -а
а вызываться с VB.
Ну вот хочет он так чтоб было
...
Рейтинг: 0 / 0
14.04.2006, 10:15
    #33666317
SHGulnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Ну неужели никто не может мне ответить или что нить посоветовать
...
Рейтинг: 0 / 0
14.04.2006, 10:31
    #33666368
Нужен утвердительный ответ
SHGulnur...
Подскажите мою задачу можно решить или нет?

Только если открыть Access Application
...
Рейтинг: 0 / 0
14.04.2006, 10:39
    #33666398
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
SHGulnur, уточните, что именно вы хотите: запустить запрос с параметрами в Access из VB или выполнить процедуру, находящуюся в стандратном модуле приложения Access?
...
Рейтинг: 0 / 0
14.04.2006, 10:48
    #33666428
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Да, решить задачу можно. Нужен второй запрос, в котором будет вызов указанной процедуры. И этот второй запрос уже выполнять через ADO. Чуть позже будет пример.
...
Рейтинг: 0 / 0
14.04.2006, 10:48
    #33666430
Нужен утвердительный ответ
AshtonSHGulnur, уточните, что именно вы хотите: запустить запрос с параметрами в Access из VB или выполнить процедуру, находящуюся в стандратном модуле приложения Access?
Вроде ж четко написано

авторв Access в модуле прописана процедура

Public Sub InsertTab1(MyTable As String, pN1 As String, pN2 As String)
...
Рейтинг: 0 / 0
14.04.2006, 11:19
    #33666540
Нужен утвердительный ответ
AshtonSHGulnur, уточните, что именно вы хотите: запустить запрос с параметрами в Access из VB или выполнить процедуру, находящуюся в стандратном модуле приложения Access?
Вроде ж четко написано

авторв Access в модуле прописана процедура

Public Sub InsertTab1(MyTable As String, pN1 As String, pN2 As String)
...
Рейтинг: 0 / 0
14.04.2006, 11:21
    #33666552
Нужен утвердительный ответ
marvanДа, решить задачу можно. Нужен второй запрос, в котором будет вызов указанной процедуры. И этот второй запрос уже выполнять через ADO. Чуть позже будет пример.
Ждем с нетерпением ...


Извините за случайный повторный ответ.
...
Рейтинг: 0 / 0
14.04.2006, 11:30
    #33666588
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
По поводу процедуры в модуле Access. После выполенения запроса неплохо было бы включать обратно сообщения на подтверждение. И зачем в конце писать кучу "Exit Sub".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Public Sub InsertTab1( _
  MyTable As String, _
  pN1 As String, _
  pN2 As String)
    On Error GoTo pEnd
    
    Dim MySQL As String
    
    MySQL = "INSERT INTO " & MyTable & _
      " (naimr, naimk)" & _
      " VALUES ('" & pN1 & "', '" & pN2 & "')"
    
    DoCmd.SetWarnings False
    DoCmd.RunSQL MySQL
    DoCmd.SetWarnings True
pEnd:
End Sub

По теме.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Sub AddRecord()
    Dim acApp As Object
    
    Set acApp = CreateObject("Access.Application")
    acApp.Visible = False
    
    acApp.OpenCurrentDatabase "D:\1\db1.mdb", False
    
    acApp.Run "InsertTab1", "Таблица1", "А", "Б"
    acApp.Quit
    
    Set acApp = Nothing
End Sub
...
Рейтинг: 0 / 0
14.04.2006, 11:50
    #33666679
Нужен утвердительный ответ
Ashton
...
По теме.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Sub AddRecord()
    Dim acApp As Object
    
    Set acApp = CreateObject("Access.Application")
    acApp.Visible = False
    
    acApp.OpenCurrentDatabase "D:\1\db1.mdb", False
    
    acApp.Run "InsertTab1", "Таблица1", "А", "Б"
    acApp.Quit
    
    Set acApp = Nothing
End Sub

Ага, только можно сразу:
Set acApp = GetObject("D:\1\db1.mdb")
...
Рейтинг: 0 / 0
14.04.2006, 13:00
    #33667012
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Пока пытался реализовать задуманное - Ashton всё уже сделал :)
А запрос типа:
Код: plaintext
1.
PARAMETERS MyTable Text (  255  ), pN1 Text (  255  ), pN2 Text (  255  );
SELECT InsertTab([MyTable],[pN1],[pN2]) AS RetVal;
из VB запустить не удалось.
...
Рейтинг: 0 / 0
14.04.2006, 15:25
    #33667591
SHGulnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Ashton
Большое спасибо
The Fool On The Hill и Вам

Подскажите еще чтоб после вставки
вызывая в VB процедура Access возвращала ID
вставленной записи

Еще раз спасибо!!!
...
Рейтинг: 0 / 0
14.04.2006, 15:32
    #33667619
SHGulnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Это для marvan

Чтобы запустить запрос на добавление

PARAMETERS [@naimr] Text ( 255 ), [@naimk] Text ( 255 );
INSERT INTO spogr ( naimr, naimk )
SELECT [@naimr] AS Выражение1, [@naimk] AS Выражение2;

в VB

Public Sub AddRecord()
Conn.ConnectMDB (Text1.Text)
Set cmd = Nothing
Set cmd = New ADODB.Command
cmd.CommandType = adCmdStoredProc
cmd.ActiveConnection = Conn.Connection
cmd.CommandText = "NewRec"
cmd.Parameters.Append cmd.CreateParameter("param1", adVarChar, adParamInput, 500, "p_text_rus")
cmd.Parameters.Append cmd.CreateParameter("param2", adVarChar, adParamInput, 500, "p_text_kaz")
cmd.Execute
end sub
...
Рейтинг: 0 / 0
14.04.2006, 15:57
    #33667731
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function InsertTab1( _
  MyTable As String, _
  pN1 As String, _
  pN2 As String) As Long
    On Error GoTo pEnd
    
    Dim MySQL As String
    
    MySQL = "INSERT INTO " & MyTable & _
      " (naimr, naimk)" & _
      " VALUES ('" & pN1 & "', '" & pN2 & "')"
    
    DoCmd.SetWarnings True
    DoCmd.RunSQL MySQL
    DoCmd.SetWarnings True
    
    InsertTab1 = DMax("[Id]", MyTable)
pEnd:
End Function

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Sub AddRecord()
    Dim acApp As Object
    
    Set acApp = CreateObject("Access.Application")
    acApp.Visible = False
    
    acApp.OpenCurrentDatabase "D:\1\db1.mdb", False
    
    MsgBox acApp.Run("InsertTab1", "Таблица1", "А", "Б")
    acApp.Quit
    
    Set acApp = Nothing
End Sub
...
Рейтинг: 0 / 0
14.04.2006, 16:35
    #33667899
SHGulnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Спасибо
Мне еще надо чтоб возвращалась сообщение об ошибки если допусти уникальность нарушается
а тут тишина Сообщение не выходит.
...
Рейтинг: 0 / 0
17.04.2006, 08:46
    #33670087
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен утвердительный ответ
Подключи библиотеку "Microsoft DAO Object Library", если она не подключена, и перепиши функцию в модуле Access следующим образом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public Function InsertTab1( _
  MyTable As String, _
  pN1 As String, _
  pN2 As String) As Variant
    On Error GoTo pEnd
    
    Dim MySQL As String
    
    MySQL = "INSERT INTO " & MyTable & _
      " (naimr, naimk)" & _
      " VALUES ('" & pN1 & "', '" & pN2 & "')"
    
    CurrentDb.Execute MySQL, dbFailOnError
       
    InsertTab1 = DMax("[Id]", MyTable)
    Exit Function
    
pEnd:
    InsertTab1 = Err.Number & " " & Err.Description
End Function

Потому что, в случае с RunSQL сообщение об ошибке будет выводится на экран, с ожиданием от пользователя каких-либо действий.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужен утвердительный ответ / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]