Как с помощью VBA создать новую запись в таблице?
» VBA for Access
Необходимо добавить:
'Tools -> References -> Microsoft DAO x.x Object Library
Dim rstCurr As DAO.Recordset
Dim dbsCurr As Database
Set dbsCurr = Access.CurrentDb
Set rstCurr = dbsCurr.OpenRecordset("Имя таблицы", dbOpenDynaset)
rstCurr.AddNew
rstCurr.Fields("Имя поля").Value = Time$
rstCurr.Update
'Tools -> References -> Microsoft DAO x.x Object Library
Dim rstCurr As DAO.Recordset
Dim dbsCurr As Database
Set dbsCurr = Access.CurrentDb
Set rstCurr = dbsCurr.OpenRecordset("Имя таблицы", dbOpenDynaset)
rstCurr.AddNew
rstCurr.Fields("Имя поля").Value = Time$
rstCurr.Update
Спасибо, получилось. Только теперь новая проблема. Сделала свободное поле в форме. Ввожу туда данные, а модуль эти данные почему то невидит. Пишит значение = Null. Что делать?
Это решабельно так:
Me!Поле1.SetFocus
rstCurr.Fields("Имя поля").Value = Me!Поле1.Text
Me!Поле1.SetFocus
rstCurr.Fields("Имя поля").Value = Me!Поле1.Text
Можно ли сделать так, чтобы при открытии одного окна, открывалось сразу 3 формы? Но мне нужно так, чтобы они были равноправными, т.е. , чтобы подчиненность не присутствовала.
Несколько не понимаю, что имеется ввиду под словом "окно" и про подчинённость.
Если нужно одновременное открытие какого-то количества форм, то можно сделать так:
Private Sub Form_Open(Cancel As Integer) ' Обработчик открытия одной из форм
DoCmd.OpenForm ("Форма2")
DoCmd.OpenForm ("Форма3")
End Sub
Если нужно одновременное открытие какого-то количества форм, то можно сделать так:
Private Sub Form_Open(Cancel As Integer) ' Обработчик открытия одной из форм
DoCmd.OpenForm ("Форма2")
DoCmd.OpenForm ("Форма3")
End Sub
Я слышала, что вроде можно создать кнопочную форму, при вызове которой можно открыть сразу несколько форм. Но я не знаю как это сделать . Можешь помочь? Еще, я бы хотела, чтобы введя значения в одну форму, эти данные передавались в другую без закрытия последней.
Цитата:
Я слышала, что вроде можно создать кнопочную форму, при вызове которой можно открыть сразу несколько форм.
А чем не подходит то, что я предложил выше?
А вобщем, нельзя ли конкретнее: что есть и что хотелось бы получить...
Цитата:
Еще, я бы хотела, чтобы введя значения в одну форму, эти данные передавались в другую без закрытия последней
А значения куда вводятся?!? в таблицу, в Едит или ещё куда-нибудь
Мне надо через форму1 заполнить таблицу. В этой форме1 две записи берут значения из других двух форм(форма2, форма3). Я хочу, чтобы все эти три формы одновременно открывались и обновляя записи в одной форме(форме2 или форме3), эти данные передовались в форму1. Сейчас, чтобы добиться этого мне приходится закрывать форму1 и открывать ее заново. Такое возможно?
Значения полей таблицы принадлежат полям какой формы?
Формы1
Добавлено
Еще, на счет
Цитата:
пишет: Invalid use of Me keyword
Добавлено
Еще, на счет
Цитата:
Me!Поле1.SetFocus
rstCurr.Fields("Имя поля").Value = Me!Поле1.Text
пишет: Invalid use of Me keyword
Если есть возможность, то отправь базу мне на почту (можно без данных), и я попытаюсь тебе помочь
Я уже разобралась с формами. Ты мне очень помог, спасибо . Если не затруднит, скажи, как переменной в модуле передать значения, которые выходят в запросе? И еще, откуда ты это все знаешь?
Объяви глобальную переменную и её будет видно во всех модулях проекта:
Public B As DAO.Recordset
Цитата:
А я вобщем-то, по большому счёту, ничего и не знаю
Public B As DAO.Recordset
Цитата:
откуда ты это все знаешь?
А я вобщем-то, по большому счёту, ничего и не знаю
Не понимаю. У меня 3 запроса. При запуске каждого из них выдается строка в которой нужное мне значение. Как это значение присвоить переменной модуля?
Понятно, я думал у тебя на выходе массив значений....
Если у тебя просто строка, то объяви переменную
----- Модуль 1 --------
public B as string дальше
b = Значение на выходе запроса (строка)
----- Модуль 2 ---------
.....
Поле1.Text = b
---------------------------
т.е. у тебя значение из запроса попадёт куда нужно...
З.Ы. Если мы опять друг-друга не поняли, то приведи пример куска программы где тебе нужно это сделать...
Если у тебя просто строка, то объяви переменную
----- Модуль 1 --------
public B as string дальше
b = Значение на выходе запроса (строка)
----- Модуль 2 ---------
.....
Поле1.Text = b
---------------------------
т.е. у тебя значение из запроса попадёт куда нужно...
З.Ы. Если мы опять друг-друга не поняли, то приведи пример куска программы где тебе нужно это сделать...
Как закопировать таблицу из одной БД в другую ?
Как закопировать наново и как добавить к уже существующей таблице?
я так понял что работа с таблицами полностью реализовано в АДО ?
Как закопировать наново и как добавить к уже существующей таблице?
я так понял что работа с таблицами полностью реализовано в АДО ?
' В ADO так делается
' ========================================
' в модуле
Public cn As New ADODB.Connection
Public cm As New ADODB.Command
Public rs As New ADODB.Recordset
' в модуле
sub MakeConnect()
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _
"\База.mdb;Mode=ReadWrite;Persist Security Info=False"
Set cm.ActiveConnection = cn
Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
end sub
' ========================================
' в модуле формы
'
' обновление записи
Private Sub btnUpdate_Click()
rs!Поле_1 = Me.Text1.Text
rs!Поле_2 = Me.Text2.Text
rs!Поле_3 = Me.Text3.Text
rs.Update
End Sub
' добавление записи
Private Sub btnNew_Click()
On Error Resume Next
cm.CommandText = "INSERT INTO Таблица_1 (Поле_1,Поле_2,Поле_3) VALUES ('" & _
CDate(Date) & "','" & CDate(Time()) & "','Новая запись');"
cm.Execute
rs.Requery
rs.MoveLast
End Sub
' удаление записи по условию
Private Sub btnDel_Click()
On Error Resume Next
Dim m_CurRec As Long
Dim Response As Integer
Dim Msg As String, Title As String
Msg = "Вы действительно хотите удалить текущую запись ?"
Title = "Внимание"
Response = MsgBox(Msg, vbYesNo + vbCritical + vbDefaultButton2, _
Title)
If Response <> vbYes Then
Exit Sub
End If
m_CurRec = rs.AbsolutePosition
m_Bookmark = rs.Bookmark
cm.CommandText = "delete from Таблица_1 where Поле_3='" & me.Text3.Text & "'
cm.Execute
' загрузка обновленного рекордсета
Call LoadDataFromDB
' возврат к нужной записи
If m_CurRec >= rs.RecordCount Then
rs.MoveLast
Else
rs.Bookmark = m_Bookmark
End If
End Sub
' удаление всех записей
Private Sub btnDelAll_Click()
On Error Resume Next
Dim Response As Integer
Dim Msg As String, Title As String
Msg = "Вы действительно хотите удалить все записи "
Title = "Внимание"
Msg = Msg & " из базы ?"
cm.CommandText = "delete from Таблица_1"
Response = MsgBox(Msg, vbYesNo + vbCritical + vbDefaultButton2, _
Title)
If Response <> vbYes Then ' User chose Yes.
Exit Sub
End If
cm.Execute
Call LoadDataFromDB
End Sub
' заргрузка данных в рекордсет и датагрид
Private Sub LoadDataFromDB()
Dim sCmd As String
On Error Resume Next
sCmd = "SELECT Поле_1,Поле_2,Поле_3 from Таблица_1"
If rs.State = adStateOpen Then
rs.Close
End If
rs.Open sCmd
Set DataGrig1.DataSource = rs
End Sub
Добавлено
' открытие множества форм frmMyForm
Dim f As frmMyForm
For i = 1 To iFormNeeded
Set f = New frmMyForm
f.Show
Next
' ========================================
' в модуле
Public cn As New ADODB.Connection
Public cm As New ADODB.Command
Public rs As New ADODB.Recordset
' в модуле
sub MakeConnect()
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & _
"\База.mdb;Mode=ReadWrite;Persist Security Info=False"
Set cm.ActiveConnection = cn
Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
end sub
' ========================================
' в модуле формы
'
' обновление записи
Private Sub btnUpdate_Click()
rs!Поле_1 = Me.Text1.Text
rs!Поле_2 = Me.Text2.Text
rs!Поле_3 = Me.Text3.Text
rs.Update
End Sub
' добавление записи
Private Sub btnNew_Click()
On Error Resume Next
cm.CommandText = "INSERT INTO Таблица_1 (Поле_1,Поле_2,Поле_3) VALUES ('" & _
CDate(Date) & "','" & CDate(Time()) & "','Новая запись');"
cm.Execute
rs.Requery
rs.MoveLast
End Sub
' удаление записи по условию
Private Sub btnDel_Click()
On Error Resume Next
Dim m_CurRec As Long
Dim Response As Integer
Dim Msg As String, Title As String
Msg = "Вы действительно хотите удалить текущую запись ?"
Title = "Внимание"
Response = MsgBox(Msg, vbYesNo + vbCritical + vbDefaultButton2, _
Title)
If Response <> vbYes Then
Exit Sub
End If
m_CurRec = rs.AbsolutePosition
m_Bookmark = rs.Bookmark
cm.CommandText = "delete from Таблица_1 where Поле_3='" & me.Text3.Text & "'
cm.Execute
' загрузка обновленного рекордсета
Call LoadDataFromDB
' возврат к нужной записи
If m_CurRec >= rs.RecordCount Then
rs.MoveLast
Else
rs.Bookmark = m_Bookmark
End If
End Sub
' удаление всех записей
Private Sub btnDelAll_Click()
On Error Resume Next
Dim Response As Integer
Dim Msg As String, Title As String
Msg = "Вы действительно хотите удалить все записи "
Title = "Внимание"
Msg = Msg & " из базы ?"
cm.CommandText = "delete from Таблица_1"
Response = MsgBox(Msg, vbYesNo + vbCritical + vbDefaultButton2, _
Title)
If Response <> vbYes Then ' User chose Yes.
Exit Sub
End If
cm.Execute
Call LoadDataFromDB
End Sub
' заргрузка данных в рекордсет и датагрид
Private Sub LoadDataFromDB()
Dim sCmd As String
On Error Resume Next
sCmd = "SELECT Поле_1,Поле_2,Поле_3 from Таблица_1"
If rs.State = adStateOpen Then
rs.Close
End If
rs.Open sCmd
Set DataGrig1.DataSource = rs
End Sub
Добавлено
' открытие множества форм frmMyForm
Dim f As frmMyForm
For i = 1 To iFormNeeded
Set f = New frmMyForm
f.Show
Next
Народ, два вопроса:
1. Как в цикле копировать из таблицы по n строк, скажем первые три, потом следующие три и т.д?
2. Как получить/записать в конкретное поле для определенной строки (в таблице, не на форме!), например в строку №2, поле с именем Sum?
Спасибо!
1. Как в цикле копировать из таблицы по n строк, скажем первые три, потом следующие три и т.д?
2. Как получить/записать в конкретное поле для определенной строки (в таблице, не на форме!), например в строку №2, поле с именем Sum?
Спасибо!
Как можно из процедуры Access-а узнать есть ли комп в сети и есть ли на нем определенный файл, залочен он или нет, при этом я имею на этом компе все права?
Все компы на Win2000 pro
Все компы на Win2000 pro
Вопрос :
как в аксессе (может и инструментами ВБА) сделать так :
когда значение в конкретной ячейке переступает какой-то порог значений, чтобы оно краснело? Это можно реализовать в экселе как-то. Я своими глазами видел это в сводных таблицах. Но мне надо так в аксессе сделать.
как в аксессе (может и инструментами ВБА) сделать так :
когда значение в конкретной ячейке переступает какой-то порог значений, чтобы оно краснело? Это можно реализовать в экселе как-то. Я своими глазами видел это в сводных таблицах. Но мне надо так в аксессе сделать.
Child
В Access есть такое понятие - "условное форматирование".
Надо выделить свой элемент ввода, а потом пойти в меню (кажется, "Format") и там будет соответствующий пункт.
В Access есть такое понятие - "условное форматирование".
Надо выделить свой элемент ввода, а потом пойти в меню (кажется, "Format") и там будет соответствующий пункт.
Кто работал со сводными таблицами в аксесе? Они полностью по функциям и возможностям совпадают с экселевским?
Забыл пароль редактора VB в базе Microsoft Access как востановить пароль?
clstl
программами для восстановления. хоть одну пробовал?
программами для восстановления. хоть одну пробовал?
Пробовал, не помогает! Если восстанавливать базу с помощью «AccessRecovery» я получаю только таблицы и запросы, формы представляют собой нефункциональные макеты, не содержащие процедур, модулей в восстановленной базе нет вообще.
clstl
а если посмотреть не на программы восстановления, а которые целенаправленно на пароли рассчитаны?
а если посмотреть не на программы восстановления, а которые целенаправленно на пароли рассчитаны?
Они не поддерживают формат (.mdb)!
clstl
Sleepwalker
Восстановление паролей это в другом разделе спрашивать надо. Здесь только программирование.
Sleepwalker
Восстановление паролей это в другом разделе спрашивать надо. Здесь только программирование.
К ShIvADeSt. Пожалуйста подскажите в каком разделе?
Страницы: 1234567891011121314151617
Предыдущая тема: Delphi+ADO
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.