Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ADO метод Seek, проверка на наличие записи / 25 сообщений из 26, страница 1 из 2
01.11.2004, 14:38:06
    #32763227
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
пытался проверить запись по составному индексу, не получается.

1. Имеется таблица справочник, имеет два поля : ID и текст
2. Имеются два индекса ID - Primary, Текст- составной уникальный
3. таблица имеет связь с основной таблицей.

Цель:

1.проверить запись по полю текст,
если запись не имеется, то добавить.

2.Вынуть код ID этой записи.

Благодарю за участие!
...
Рейтинг: 0 / 0
01.11.2004, 14:40:29
    #32763235
Shurgenz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
а как пытался то?
...
Рейтинг: 0 / 0
01.11.2004, 14:42:12
    #32763240
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Function AddID(Table As String, Values As String) As Integer
Dim rs As New ADODB.Recordset, n As Integer
rs.Open Table, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

10:
n = CurrentProject.Connection.Execute("SELECT Count(" & Table & "." & rs.Fields(0).Name & ") AS [Count-" & rs.Fields(0).Name & "] FROM " & Table & " WHERE (((" & Table & ".[" & rs.Fields(1).Name & "])='" & Values & "'))").Fields(0)

If n = 0 Then

rs.AddNew
rs.Fields(1) = Values
rs.Update
rs.Close
GoTo 10
End If

'Здесь не всегда срабатывает
' Ошибка : Run-time error '6' Overflow
':
AddID = CurrentProject.Connection.Execute("SELECT " & Table & ".[" & rs.Fields(0).Name & "] FROM " & Table & " WHERE (((" & Table & ".[" & rs.Fields(1).Name & "]) ='" & Values & "')) ").Fields(0)

End Function
...
Рейтинг: 0 / 0
01.11.2004, 14:43:17
    #32763242
ищ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
т1, стр.227

Public Sub SeekExample()
Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset
Set rst.ActiveConnection = CurrentProject.Connection
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Open "tblCustomers", Options:=adCmdTableDirect
rst.Index = "PrimaryKey"
rst.Seek "BBBBB", adSeekAfterEQ
If rst.EOF Then
MsgBox "Unable to find a match"
Else
MsgBox "The customer name is: " & rst("CompanyName")
End If
rst.Close
Set rst = Nothing
End Sub
...
Рейтинг: 0 / 0
01.11.2004, 14:44:41
    #32763245
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Мудрённый клён вернулся :)

если тебе надо искать по полю "текст" Seek'oм, то и индекс тебе надо именно по полю "текст", а не составной.
...
Рейтинг: 0 / 0
01.11.2004, 14:46:44
    #32763248
ищ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
черт тебя дергает что ля в рекордсеты лезть?
рекордсеты -самое последеее дело.
а тем более для такого новичка как ты
...
Рейтинг: 0 / 0
01.11.2004, 14:47:17
    #32763250
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Мудрый клёнFunction AddID(Table As String, Values As String) As Integer
Dim rs As New ADODB.Recordset, n As Integer
rs.Open Table, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

10:
n = CurrentProject.Connection.Execute("SELECT Count(" & Table & "." & rs.Fields(0).Name & ") AS [Count-" & rs.Fields(0).Name & "] FROM " & Table & " WHERE (((" & Table & ".[" & rs.Fields(1).Name & "])='" & Values & "'))").Fields(0)

If n = 0 Then

rs.AddNew
rs.Fields(1) = Values
rs.Update
rs.Close
GoTo 10
End If

'Здесь не всегда срабатывает
' Ошибка : Run-time error '6' Overflow
':
AddID = CurrentProject.Connection.Execute("SELECT " & Table & ".[" & rs.Fields(0).Name & "] FROM " & Table & " WHERE (((" & Table & ".[" & rs.Fields(1).Name & "]) ='" & Values & "')) ").Fields(0)

End Function

да уж...
просто без комментариев...
...
Рейтинг: 0 / 0
01.11.2004, 14:57:21
    #32763279
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
ищчерт тебя дергает что ля в рекордсеты лезть?
рекордсеты -самое последеее дело.
а тем более для такого новичка как ты

А как быть, без рекордсетов?
...
Рейтинг: 0 / 0
01.11.2004, 14:57:48
    #32763280
Shurgenz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
А что? настолько неизвестны заранее ни имя таблицы, ни поля? даже поля?
...
Рейтинг: 0 / 0
01.11.2004, 14:59:07
    #32763283
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
ShurgenzА что? настолько неизвестны заранее ни имя таблицы, ни поля? даже поля?

это наверно универсальная ф-ия, на все случаи жизни
...
Рейтинг: 0 / 0
01.11.2004, 15:03:00
    #32763292
Daf
Daf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Мудрый клён ищчерт тебя дергает что ля в рекордсеты лезть?
рекордсеты -самое последеее дело.
а тем более для такого новичка как ты

А как быть, без рекордсетов?

Ну можно DlookUp использовать для проверки наличия интересующего тебя текста.
Для меня это более понятно и просто чем рекордсеты.

Задачи можно по разному решать ...
...
Рейтинг: 0 / 0
01.11.2004, 15:08:20
    #32763314
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
На счет этой ошибки я разобрался:

Integer имеет ограничение , а у меня уже здесь перевалило за 60000.
Поменял на String и всё.

'Здесь не всегда срабатывает
' Ошибка : Run-time error '6' Overflow

на счет:
А что? настолько неизвестны заранее ни имя таблицы, ни поля? даже поля?

Это универсальная функция, замысел плохой, но надо подкорректировать кое где и всё не так уж и плохо.
...
Рейтинг: 0 / 0
01.11.2004, 15:08:40
    #32763319
Shurgenz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
типа, как я понимаю,

select a.id from основная_таблица a left join справочник b on a.id=b.id where
b.id is null

получаешь id, которых нет ваще... для них надо делать insert

select a.id from основная_таблица a join справочник b on a.id=b.id where
b.text is null

id, у которых нет текста просто... для них update
...
Рейтинг: 0 / 0
01.11.2004, 15:09:42
    #32763323
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Клён, а где ты в своей универсальной ф-ии используешь Seek?
...
Рейтинг: 0 / 0
01.11.2004, 15:14:33
    #32763340
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
KelmeКлён, а где ты в своей универсальной ф-ии используешь Seek?

Сейчас доделоваю, под Seek.

И выставлю на обозрение, мож где подправите.
...
Рейтинг: 0 / 0
01.11.2004, 15:17:33
    #32763355
Iskander68
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Клен, не мог бы ты объяснить, как это получается.
"2. Имеются два индекса ID - Primary, Текст- составной уникальный" Что это
значит? Составной индекс из одного поля? Или два индекса - один из одного
поля, а другой составной?

Может в этом дер хунт беграбен?
--
Regards
Alexander Artamonov

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
01.11.2004, 15:17:59
    #32763356
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Function AddID(Table As String, Values As String) As String

Dim rst As New ADODB.Recordset

Set rst.ActiveConnection = CurrentProject.Connection
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Open Table, Options:=adCmdTableDirect
rst.Index = rst.Fields(1).Name
rst.Seek Values, adSeekAfterEQ
If rst.EOF Then
rst.AddNew
rst.Fields(1) = Values
End If

AddID = rst.Fields(0)

rst.Close
Set rst = Nothing

End Function
...
Рейтинг: 0 / 0
01.11.2004, 15:18:40
    #32763357
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
>Цель:
>1.проверить запись по полю текст,
>если запись не имеется, то добавить.
>2.Вынуть код ID этой записи.

по CurrentProject.Connection.Execute
предполагаю что ADP+MSSQL
тогда достаточно написать ХП-ку котора все это сделает

Create PROCEDURE MySP
(
@MyParam непонялкакоготипа
)
AS
SET NOCOUNT ON
DECLARE @MyID int
SELECT @MyID=ID FROM MyTbl WHERE Текст=@MyParam
--если запись не найдена
if @MyID is Null
Begin
--Вставить ее
INSERT INTO MyTbl (Текст) SELECT @MyParam
SET @MyID=@@IDENTITY
End
--Возвращаю код записи
SELECT @MyID

dim n as long

n = CurrentProject.Connection.Execute("MySP '" & Values & "'")
...
Рейтинг: 0 / 0
01.11.2004, 15:19:50
    #32763360
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Iskander68
Клен, не мог бы ты объяснить, как это получается.
"2. Имеются два индекса ID - Primary, Текст- составной уникальный" Что это
значит? Составной индекс из одного поля? Или два индекса - один из одного
поля, а другой составной?

Может в этом дер хунт беграбен?
--
Regards
Alexander Artamonov

Posted via ActualForum NNTP Server 1.1

Простите сэр! Текст - просто некластеризованный, уникальный индекс.
...
Рейтинг: 0 / 0
01.11.2004, 15:21:08
    #32763362
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
'недописал :)
n = CurrentProject.Connection.Execute("MySP '" & Values & "'").Collect(0)
...
Рейтинг: 0 / 0
01.11.2004, 15:21:34
    #32763363
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Latuk>Цель:
>1.проверить запись по полю текст,
>если запись не имеется, то добавить.
>2.Вынуть код ID этой записи.

по CurrentProject.Connection.Execute
предполагаю что ADP+MSSQL
тогда достаточно написать ХП-ку котора все это сделает

Create PROCEDURE MySP
(
@MyParam непонялкакоготипа
)
AS
SET NOCOUNT ON
DECLARE @MyID int
SELECT @MyID=ID FROM MyTbl WHERE Текст=@MyParam
--если запись не найдена
if @MyID is Null
Begin
--Вставить ее
INSERT INTO MyTbl (Текст) SELECT @MyParam
SET @MyID=@@IDENTITY
End
--Возвращаю код записи
SELECT @MyID

dim n as long

n = CurrentProject.Connection.Execute("MySP '" & Values & "'")


сейча работаю с mdb.
но всё равно спасибо, пригадится!
...
Рейтинг: 0 / 0
01.11.2004, 15:32:48
    #32763391
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
А забыл вставить: rs.Update

после rst.Fields(1) = Values.
...
Рейтинг: 0 / 0
02.11.2004, 12:11:05
    #32764660
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
Вот код:

Function AddID(Table As String, Values As String) As String

Dim rst As New ADODB.Recordset

Set rst.ActiveConnection = CurrentProject.Connection
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Open Table, Options:=adCmdTableDirect
rst.Index = rst.Fields(1).Name
rst.Seek Values, adSeekAfterEQ
If rst.EOF Then
rst.AddNew
rst.Fields(1) = Values
rst.Update
End If

AddID = rst.Fields(0)

rst.Close
Set rst = Nothing

End Function


Запускаю так:
допустим :
msgBox AddID ("OTD","Хирургия")

Он мне возвращает код Хирургичского отделения 2.

Как работает Seek ?!

Я ему даю "Хирургия", а после строки
rst.Seek Values, adSeekAfterEQ

на rst.Fields(1)

возвращает "Хирургичское отделение 2"

Это глюк?
...
Рейтинг: 0 / 0
02.11.2004, 12:17:50
    #32764674
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
автор
Как работает Seek ?!


да ты будешь хелп читать или ты решил всех достать? :)

автор
adSeekAfterEQ


значение этой константы ты знаешь?

автор
Это глюк?


а мы откуда знаем, что там тебе должно вернутся?
...
Рейтинг: 0 / 0
02.11.2004, 12:18:26
    #32764677
Мудрый клён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO метод Seek, проверка на наличие записи
adSeekFirstEQ
Указатель на запись позиционируется в первую удовлетворяющую требованиям запись, если она найдена, либо в конец таблицы, если не найдена

Всё теперь нормально.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ADO метод Seek, проверка на наличие записи / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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