Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Как узнать ID (номер добавленной записи) PHP+Access  [new]
FliN
Member

Откуда: г.Москва
Сообщений: 9
Создана база на Access (mdb файл) в таблице существует столбец «Счетчик».
Доступ к mdb осуществлен с помощью ODBC. (Источники данных (ODBC))
Необходимо узнать номер после выполнения команды «INSERT».
Гарантии что поток одни нет.


<?php

$sql = "INSERT INTO $szRes.$szProjects ( Ref, Code, Name ) VALUES ( '$ref', '$code', '$name' )";
$res = odbc_exec($conW, $sql);

?>

На SELECT SCOPE_IDENTITY() ругается – ошибка 3700.

П.С. Поиск хорошая вещь, но без ссылки глупое утверждение.
18 апр 07, 09:02    [4034429]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
SCOPE_IDENTITY - этого в mdb нету.
18 апр 07, 09:06    [4034444]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
ILL HEAD
Member [заблокирован]

Откуда:
Сообщений: 8498
для MDB имхо - никак
или делать выборку select MAX(поле_Счетчик) from $szRes.$szProjects
но есть вероятность что счетчик уже зашкалил за максимум тоесть его значения стали меньше предыдущих
(хотя вероятность маленькая но она есть)
18 апр 07, 09:08    [4034452]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Если предусмотреть в таблице некий ид процесса, то тогда выборка максимального при условии что процесс ид = текущему точно даст нужный результат.

Если сочетания полей уникальное, то можно вытащить ид по совокупности значений полей.
18 апр 07, 09:12    [4034464]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
FliN
Member

Откуда: г.Москва
Сообщений: 9
Проблема в том, что один процесс может добавить несколько подобных записей.
Как вариант генерировать каждый раз GUID не очень :(
18 апр 07, 09:26    [4034509]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
bILL HEAD
Guest
дату/время
?
18 апр 07, 10:19    [4034798]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
bILL HEAD
Guest
в JET SQL есть такая агрегатная функция LAST
говорят, что ей можно доверять %)
18 апр 07, 10:20    [4034806]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
tuandreeva
Member

Откуда: Самара
Сообщений: 823
If Me.NewRecord Then
Dim n&
n = DMax("№", "База")
Me("№").DefaultValue = CStr(n + 1)
End If
18 апр 07, 10:30    [4034853]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
guest11
Guest
select @@identity
18 апр 07, 10:37    [4034900]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
FliN
Member

Откуда: г.Москва
Сообщений: 9
guest11
select @@identity


$sql = "INSERT INTO $szRes.$szProjects ( Ref, Code, Name ) VALUES ( '$ref', '$code', '$name' );
select @@identity; ";
//SELECT TOP 1 FROM $szLainRes.$szProjects;";

$res = odbc_exec($conW, $sql);
$ID = odbc_result($res, "ID");
print "ID=$id<br>";

PHP:
ID=46

MDB:
46|1|1|ABCD
47|1|1|ABCD
45|1|1|ABCD


=,?
18 апр 07, 12:08    [4035811]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
FliN
Member

Откуда: г.Москва
Сообщений: 9
tuandreeva
If Me.NewRecord Then
Dim n&
n = DMax("№", "База")
Me("№").DefaultValue = CStr(n + 1)
End If


Гарантии что поток один нет...
18 апр 07, 12:10    [4035835]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
FliN
Member

Откуда: г.Москва
Сообщений: 9
Самый глупый способ узнать PID процесса, но какой-то кривой явно.
$PID = getmypid();
18 апр 07, 14:41    [4037168]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
Alexey Syrok
Member

Откуда: из Одессы
Сообщений: 201
автор

select @@identity
Однако и этот способ имеет ограничения, а именно:
работает либо через ADO, либо через DAO в Jet 4 и позже, и только с базами формата Аксесса 2000 и позже;
возвращает значение только из записи, добавленной программно, но не через юзер-интерфейс.

я и в asp и в php делал через рекордсет:
rs.AddNew
переменная = rs!полесчетчика
по другому никак
18 апр 07, 15:13    [4037475]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
FliN
Member

Откуда: г.Москва
Сообщений: 9
Alexey Syrok
автор

select @@identity
Однако и этот способ имеет ограничения, а именно:
работает либо через ADO, либо через DAO в Jet 4 и позже, и только с базами формата Аксесса 2000 и позже;
возвращает значение только из записи, добавленной программно, но не через юзер-интерфейс.

я и в asp и в php делал через рекордсет:
rs.AddNew
переменная = rs!полесчетчика
по другому никак


RC - это что?
Если не сложно можно полностью текст.
18 апр 07, 15:31    [4037643]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID (номер добавленной записи) PHP+Access  [new]
Alexey Syrok
Member

Откуда: из Одессы
Сообщений: 201
на асп
  Set conn_ed = Server.CreateObject("ADODB.Connection")
  With conn_ed
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .Properties("Data Source") = "C:\MyDb.mdb"
  End With
  conn_ed.Open

  Set rs_Data = Server.CreateObject("ADODB.Recordset")
  rs_Data.Open "MyTable", conn_ed, 3, 3
  With  rs_Data
    .AddNew
    vLogId = .Fields("fID") ' значение поля с автоинкрементом в vLogId
    .Fields("fDateTime") = Now()
    .Fields("fUser") = sUser
    .Update
  End With

где-то было и на пхп, не могу найти, но там по аналогии
4 май 07, 16:53    [4101380]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить