|
|
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
пытался проверить запись по составному индексу, не получается. 1. Имеется таблица справочник, имеет два поля : ID и текст 2. Имеются два индекса ID - Primary, Текст- составной уникальный 3. таблица имеет связь с основной таблицей. Цель: 1.проверить запись по полю текст, если запись не имеется, то добавить. 2.Вынуть код ID этой записи. Благодарю за участие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:38:06 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
а как пытался то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:40:29 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:42:12 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
т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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:43:17 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
Мудрённый клён вернулся :) если тебе надо искать по полю "текст" Seek'oм, то и индекс тебе надо именно по полю "текст", а не составной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:44:41 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
черт тебя дергает что ля в рекордсеты лезть? рекордсеты -самое последеее дело. а тем более для такого новичка как ты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:46:44 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
Мудрый клён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 да уж... просто без комментариев... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:47:17 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
ищчерт тебя дергает что ля в рекордсеты лезть? рекордсеты -самое последеее дело. а тем более для такого новичка как ты А как быть, без рекордсетов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:57:21 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
А что? настолько неизвестны заранее ни имя таблицы, ни поля? даже поля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:57:48 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
ShurgenzА что? настолько неизвестны заранее ни имя таблицы, ни поля? даже поля? это наверно универсальная ф-ия, на все случаи жизни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 14:59:07 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
Мудрый клён ищчерт тебя дергает что ля в рекордсеты лезть? рекордсеты -самое последеее дело. а тем более для такого новичка как ты А как быть, без рекордсетов? Ну можно DlookUp использовать для проверки наличия интересующего тебя текста. Для меня это более понятно и просто чем рекордсеты. Задачи можно по разному решать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:03:00 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
На счет этой ошибки я разобрался: Integer имеет ограничение , а у меня уже здесь перевалило за 60000. Поменял на String и всё. 'Здесь не всегда срабатывает ' Ошибка : Run-time error '6' Overflow на счет: А что? настолько неизвестны заранее ни имя таблицы, ни поля? даже поля? Это универсальная функция, замысел плохой, но надо подкорректировать кое где и всё не так уж и плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:08:20 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
типа, как я понимаю, 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:08:40 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
Клён, а где ты в своей универсальной ф-ии используешь Seek? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:09:42 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
KelmeКлён, а где ты в своей универсальной ф-ии используешь Seek? Сейчас доделоваю, под Seek. И выставлю на обозрение, мож где подправите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:14:33 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
Клен, не мог бы ты объяснить, как это получается. "2. Имеются два индекса ID - Primary, Текст- составной уникальный" Что это значит? Составной индекс из одного поля? Или два индекса - один из одного поля, а другой составной? Может в этом дер хунт беграбен? -- Regards Alexander Artamonov Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:17:33 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:17:59 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
>Цель: >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 & "'") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:18:40 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
Iskander68 Клен, не мог бы ты объяснить, как это получается. "2. Имеются два индекса ID - Primary, Текст- составной уникальный" Что это значит? Составной индекс из одного поля? Или два индекса - один из одного поля, а другой составной? Может в этом дер хунт беграбен? -- Regards Alexander Artamonov Posted via ActualForum NNTP Server 1.1 Простите сэр! Текст - просто некластеризованный, уникальный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:19:50 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
'недописал :) n = CurrentProject.Connection.Execute("MySP '" & Values & "'").Collect(0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:21:08 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
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. но всё равно спасибо, пригадится! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:21:34 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
А забыл вставить: rs.Update после rst.Fields(1) = Values. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:32:48 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
Вот код: 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" Это глюк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2004, 12:11:05 |
|
||
|
ADO метод Seek, проверка на наличие записи
|
|||
|---|---|---|---|
|
#18+
автор Как работает Seek ?! да ты будешь хелп читать или ты решил всех достать? :) автор adSeekAfterEQ значение этой константы ты знаешь? автор Это глюк? а мы откуда знаем, что там тебе должно вернутся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2004, 12:17:50 |
|
||
|
|

start [/forum/topic.php?fid=45&startmsg=32763227&tid=1670614]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
71ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 408ms |

| 0 / 0 |
