powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проверка существования записи
33 сообщений из 33, показаны все 2 страниц
Проверка существования записи
    #35004391
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
доброе время суток! 1.Народ подскажите или подкиньте идею ! задача такая , есть Бд
при записи новых данных нужно сделать проверку по двум textbox-ам
если запись существует то например msgbox "запись сществует .сделайте проверку данных" иначе выполнить update
один текст бокс это месяц , второй это год.
Пробовал MLookUP не получилось:( Не дает Public Function выполнить под кнокой Update_Click
на форме
и 2. Как сделать чтоб при постановке курсора в Текстбокс раскладка переключалась на русский сама?
Спасибо!
...
Рейтинг: 0 / 0
Проверка существования записи
    #35004530
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запрос с условие и проверка рекордсеата на наличия записей
Код: plaintext
1.
2.
3.
If rs.RecordCount> 0  Then
MsgBox "Уже есть такой элемент" 
Exit sub
End If
по второму вопросу через API функции
поищи через поиск на фруме примеры будут
...
Рейтинг: 0 / 0
Проверка существования записи
    #35004546
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT COUNT (какое-нибудь поле) 
FROM table1
Where Field1 = Text1.Text and Field2 = Text2.text


Т.е. выбрать в рекордсет количество записей по условиям содержащимся в твоих текстовых полях

2 TIKO Насчет rs.RecordCount у меня иногда получалось что в рекордсете данные есть а RecordCount = 0.
Приходилось делать так
Код: plaintext
1.
2.
3.
rs.MoveLast
rs.MoveFirst
Msgbox rs.RecordCount



С уважением, Николай.
...
Рейтинг: 0 / 0
Проверка существования записи
    #35004634
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RecordCount зависит от типа курсора если тип
rs.CursorType = adOpenStatic или если не ошибаюсь
adOpenDynamic, правильно выдает количество
по умолчание берет adOpenForwardOnly
...
Рейтинг: 0 / 0
Проверка существования записи
    #35004647
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проверка существования записи
    #35004664
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIKORecordCount зависит от типа курсора если тип
rs.CursorType = adOpenStatic или если не ошибаюсь
adOpenDynamic, правильно выдает количество
по умолчание берет adOpenForwardOnlyИ обязательно adUseClient.
...
Рейтинг: 0 / 0
Проверка существования записи
    #35006165
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за подсказки у меня с таким условием If rs.Recordset>0 организован как раз поиск по базе
попробую его как нить засунуть в форму записи
...
Рейтинг: 0 / 0
Проверка существования записи
    #35006170
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
recordcount
млин совсем с утра мозг не работает
...
Рейтинг: 0 / 0
Проверка существования записи
    #35006195
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сеили подкиньте идею !Идея
значит, делаешь индекс, со свойством "уникальные значения", в таблице.
По тому полю, где не должно быть повторений.
А в процедуре, где добавляешь запись пишешь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
On Error GoTo metka
...
'здесь добавляю запись
...
metka:
   if Err.Number = тот самый Then
         MsgBox "ТАКОЕ ЗНАЧЕНИЕ УЖЕ ИМЕЕТСЯ"
   EndIf
...
Рейтинг: 0 / 0
Проверка существования записи
    #35006344
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что то не хочет у меня работать Recordcount
ошибок не выдает но и действий не выполняет
надо как то по двум полям только проверку проводить
...
Рейтинг: 0 / 0
Проверка существования записи
    #35006381
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сеесли запись существует то например msgbox "запись сществует .сделайте проверку данных" иначе выполнить update
один текст бокс это месяц , второй это год.Вы не ошиблись формулируя вопрос?
Нельзя сделать update если запись не существует.
...
Рейтинг: 0 / 0
Проверка существования записи
    #35006458
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Имелось ввиду что на форме я заполняю данные по текстбоксам их порядка 10-15, Месяц и Год надо проверить существование записи
Если запись в БД за такой месяц и Год есть то сообщить что запись существует и выкинуть снова на форму для проверки введенных данных самим пользователем , если запись не существует то как раз и прозвести запись
...
Рейтинг: 0 / 0
Проверка существования записи
    #35006709
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СеДобрый день! Имелось ввиду что на форме я заполняю данные по текстбоксам их порядка 10-15, Месяц и Год надо проверить существование записи
Если запись в БД за такой месяц и Год есть то сообщить что запись существует и выкинуть снова на форму для проверки введенных данных самим пользователем , если запись не существует то как раз и прозвести записьТ.е. вы запрещаете редактировать записи?
Только вставка разрешена?
...
Рейтинг: 0 / 0
Проверка существования записи
    #35007042
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да редактировать уже сделанную запись запрещается , запись делается 1 раз
Проверка и условие и нужны для того чтоб не было дубль записей
Вот сейчас придумал, создал в Акцес БД запрос
SELECT DISTINCTROW tblDataInput.Month, tblDataInput.Year, Count(*) AS [Count-tblDataInput]
FROM tblDataInput
GROUP BY tblDataInput.Month, tblDataInput.Year;
Вот теперь нужна подсказка как в VB 6.0
сделать надо что то типа
Dim I as Integer
I = ( как присвоить этой переменной значение из поля запроса(Count-tblDataInput) ???
If I=1 Then MsgBox ("Запись уже сделана!") End If End Sub
Else rs.Update

Вообщем что то типа этого ,
...
Рейтинг: 0 / 0
Проверка существования записи
    #35007728
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
Private Function IsRecordExists(byval TheMonth as long, byval TheYear as long) As Boolean
   Dim rs as ADODB.Recordset
   set rs = Connection.Execute("SELECT COUNT (*) As RowsFound FROM table1 Where [Month] = " & _
   TheMonth & " and [Year] = " & TheYear)
   IsRecordExists = rs.Fields( 0 ).Value >  0 
End Function
...
Рейтинг: 0 / 0
Проверка существования записи
    #35008782
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибоза подсказку , но дело в том что
вот это
Dim rs as ADODB.Recordset
set rs =
у меня уже есть и rs я уже не могу присвоить ещё одно значение
Вот часть моего кода
Private Sub cmdUpdate_Click()
Dim cn As New ADODB.Connection
Dim cm As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim sql As String
Dim rc As Integer

Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = App.Path & "\ReportITD.mdb"
.Open
End With
sql = "select * from tblDataInput" ' создать запрос
Set rs = New ADODB.Recordset ' открыть набор записей
rs.Open sql, cn, adOpenDynamic, adLockOptimistic 'fl
' проверка, действительно ли пользователь
' хочет добавить данные
rc = MsgBox("Добавить запись?", vbYesNo + vbQuestion)
If rc = 6 Then
' процесс добавления данных
........
...
Рейтинг: 0 / 0
Проверка существования записи
    #35009293
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробуй так, может сработает (-:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Dim rs As New ADODB.Recordset
Dim cn As New ADODB.Connection
Dim sql As String

Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = App.Path & "\ReportITD.mdb"
.Open
.BeginTrans
End With

sql = "select * from tblDataInput"
With rs
    .ActiveConnection = cn
    .CursorLocation = adUseClient
    .CursorType = adOpenDynamic
    .LockType = adLockBatchOptimistic
    .Open sql
    .Filter = "[Month]=" & TheMonth & " and [Year]= " & TheYear
    If .RecordCount >  0  Then
        MsgBox "Запись уже существует " & .Fields( 1 ).Value, vbCritical
    Else
        If MsgBox("Создать новую запись?", vbQuestion + vbOKCancel) = vbOK Then
            .AddNew
            .Fields( 1 ).Value = "что то"
            .Fields( 2 ).Value = "что еще"
            .UpdateBatch
        Else
            MsgBox "Что :( опять не будем создавать новую запись!!???", vbCritical
        End If
    End If
End With
cn.CommitTrans
rs.Close
cn.Close

Set rs = Nothing
Set cn = Nothing
...
Рейтинг: 0 / 0
Проверка существования записи
    #35009447
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TIKO спасибо буду пробовать! Помоему твой вариант должен работать
...
Рейтинг: 0 / 0
Проверка существования записи
    #35009466
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно могу и ошибаться, т.к. проверить нет возможности, но :

а если фильтр использовать


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Проверка существования записи
    #35013819
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TIKOпробуй так, может сработает (-:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Dim rs As New ADODB.Recordset
Dim cn As New ADODB.Connection
Dim sql As String

Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = App.Path & "\ReportITD.mdb"
.Open
.BeginTrans
End With

sql = "select * from tblDataInput"
With rs
    .ActiveConnection = cn
    .CursorLocation = adUseClient
    .CursorType = adOpenDynamic
    .LockType = adLockBatchOptimistic
    .Open sql
    .Filter = "[Month]=" & TheMonth & " and [Year]= " & TheYear
    If .RecordCount >  0  Then
        MsgBox "Запись уже существует " & .Fields( 1 ).Value, vbCritical
    Else
        If MsgBox("Создать новую запись?", vbQuestion + vbOKCancel) = vbOK Then
            .AddNew
            .Fields( 1 ).Value = "что то"
            .Fields( 2 ).Value = "что еще"
            .UpdateBatch
        Else
            MsgBox "Что :( опять не будем создавать новую запись!!???", vbCritical
        End If
    End If
End With
cn.CommitTrans
rs.Close
cn.Close

Set rs = Nothing
Set cn = Nothing

К сожалению не работает :((
Фильтр не проверяет и запись новую в рекордсет не делает :((
...
Рейтинг: 0 / 0
Проверка существования записи
    #35013931
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что при пошаговом выполнении кода получается???
хоть какой нибудь из MsgBox-ов срабатывает?

С уважением, Николай.
...
Рейтинг: 0 / 0
Проверка существования записи
    #35013993
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет ничего не срабатывает кроме
If MsgBox("Создать новую запись?", vbQuestion + vbOKCancel) = vbOK
и последнего msgBox
MsgBox "Введеная вами запись добавлена в БД"
Главное что пошагово и ошибок не выдает
правда пришлось немного изменить строку .Filters а то выпадала
Ошибка 3001....
потом пришлось вот здесь попробовать по другому
.AddNew
.Fields(1).Value = "что то" отработало нормально
.Fields(2).Value = "что еще" отработало нормально
а дальше добавлял те поля что есть ругался что
.Fields(3 и т.д).Value = равны Null
.UpdateBatch
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014074
DEP1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.

А какой тип имеют поля
Код: plaintext
Month
и
Код: plaintext
Year
?
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014157
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
текстовые поля
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014386
DEP1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может вы проверите данные например из поля Month с перемонной TheMonth или Year может вручную строки разные. Я думаю в коде
Код: plaintext
TIKO
все нормально если в полях будут такие данных то должно выдать сообшение.
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014464
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Month и Year это два поля ,а строка получается например "ноябрь" "2007"
получатся при пошаговой проверке пишет что Filter = 0
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014487
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.Filter = rs("Month") = " & Me.txtMonth.Text & " And rs("Year") = " & Me.txtYear.Text"
Вот эта запись все равно ругается что аргументы имеют неверный тип либо выходят за предел диапозона либо вступают в конфлик с друг другом
но при наедении курсором на значения
rs("Month") и rs("Year") им присваивается значение которые я указал в форме
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014494
DEP1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я так быстренко посмотрите должно работать. :)
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014570
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если текстовые поля то так с одинарными кавычками
Код: plaintext
.Filter = "[Month]='" & Me.txtMonth.Text & "' and [Year]= '" & Me.txtYear.Text & "'"
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014752
DireStraits
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СеКак сделать чтоб при постановке курсора в Текстбокс раскладка переключалась на русский сама?
Спасибо!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal Flags As Long) As Long

Private Sub SetLayot(sTypeLayot As String)
' Если "ru" - переключить на русский, "en" - на английский
Dim r As Long, i As Integer
For i =  1  To  5 
    r = ActivateKeyboardLayout( 0 ,  0 )
    Select Case r
        Case  67699721 
            If sTypeLayot = "ru" Then Exit For
        Case  68748313 
            If sTypeLayot = "en" Then Exit For
    End Select
    i = i +  1 
Next
End Sub

Private Sub Text1_GotFocus()
SetLayot "ru"
End Sub

Грубовато, но работает
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014791
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DEP 1 спасиб за Тест буду пробовать под свой рекордсет настроить вроде как получается
DireStraits спасиб за код по раскладке , я уже сделал правда побольше размером получилось но тоже работает:)
...
Рейтинг: 0 / 0
Проверка существования записи
    #35014881
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TIKO спасиб , попробую с одной кавычкой ,хотя пробовал ,может правда где и ошибся , бывает
:)
...
Рейтинг: 0 / 0
Проверка существования записи
    #35015983
Се
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TIKO спасиб за код , немного изменил твой код, сделал запись полей вот таким образом
, а то получались поля .Fields(3 и т.д).Value = равны Null
пришлось бы класс сочинять наверное(рекомендовали) я сделал вот так и все заработало и проверка и запись.! Ну заодно может кому и пригодится такое решение NULL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
[/SRC]  If MsgBox("Создать новую запись?", vbQuestion + vbOKCancel) = vbOK Then
           rs.AddNew: rs("Month") = Me.txtMonth.Text
rs("Year") = Me.txtYear.Text
rs("AllDemand") = Me.txtAllDemand.Text
rs("FirstLine") = Me.txtFirstLine.Text
rs("Complaint") = Me.txtComplaint.Text
rs("NotRegistered") = Me.txtNotRegistered.Text
rs("Close") = Me.txtClose.Text
rs("PlanDemand") = Me.txtPlanDemand.Text[SRC vba]
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проверка существования записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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