Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизПочему возникает ошибка при редактировании таблицы через BDE ? Найти похожие ветки
← →
GreySerg (2005-06-09 11:12) [0]Есть таблица в БД MS SQL :
if exists (select * from dbo.sysobjects where id = object_id(N"[dbo].[document]") and OBJECTPROPERTY(id, N"IsUserTable") = 1)
drop table [dbo].[document]
GO
CREATE TABLE [dbo].[document] (
[id] [int] NOT NULL ,
[name] [varchar] (8000) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[document] WITH NOCHECK ADD
CONSTRAINT [PK_document] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO
заполняю ее данными :
INSERT INTO document
(id, name)
SELECT 1, replicate("a", 255)
UNION ALL
SELECT 2, replicate("b", 255)
UNION ALL
SELECT 3, replicate("c", 256)
есть такой код доступа к таблице через BDE:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
SetDBParams(DataBase1,"mydb.cfg");
with Table1 do
begin
Exclusive := False;
IndexFieldNames := "id";
TableName := "document";
Open;
while not Eof do
begin
Edit;
FieldByName("Name").Value := "34";
Next;
end;
end;
end;
почему возникает возникает ошибка "Couldn"t perform the edit because another user changed the record" , при редактировании записи (когда делаю Edit), у которой количество символов в name > 255 (в данной случае на записи с id =3) ?
Можно ли это как-то исправить ?
P.S. : переход на ADO не предлагать, т.к. слишком много кода надо переделать
← →
Ega23 © (2005-06-09 11:22) [1]Попробуй
while not Eof do
begin
Edit;
FieldByName("Name").AsString := "34";
Post;
Next;
end;
← →
GreySerg (2005-06-09 11:27) [2]та же ошибка на Edit
← →
Anatoly Podgoretsky © (2005-06-09 11:46) [3]БДЕ не поддерживает строковые поля свыше 255 символов.
← →
GreySerg (2005-06-09 13:00) [4]получается нет выхода , если использовать BDE
попробовал через BDE Tquery сделать :
with Table1 do
begin
Exclusive := False;
IndexFieldNames := "id";
TableName := "document";
Open;
while not Eof do
begin
Query1.SQL.Clear;
Query1.SQL.Add("Update document SET ");
for i := 0 to FieldCount-1 do
begin
if (i <> 1) and (Fields[i].FieldName <> "id") then Query1.SQL.Add(",");
if Fields[i].FieldName <> "id" then
Query1.SQL.Add(Fields[i].FieldName + " = :" + Fields[i].FieldName);
end;
Query1.SQL.Add("where id =" + FieldByName("id").AsString);
Query1.ParamByName("name").AsString := "34";
Query1.ExecSQL;
Next;
end;
end;
вроде работает , но если слегка изменить код
s := "";
for i:= 1 to 256 do
S:= s + "b";
Query1.ParamByName("name").AsString := S;
ошибок не выдает, но вставляет белиберду ,если Length(S)> 255
← →
Ega23 © (2005-06-09 13:21) [5]ошибок не выдает, но вставляет белиберду ,если Length(S)> 255
Потому, что это уже BLOB.
← →
sniknik © (2005-06-09 15:06) [6]Query1.SQL.Add("Update document SET");
Query1.SQL.Add("Name = :Name1 + :Name2");
s := "";
for i:= 1 to 250 do
S:= s + "b";
Query1.ParamByName("name1").AsString := S;
Query1.ParamByName("name2").AsString := S;
сквозь BDE проскочет, а серверу пофигу он поддерживает он сложит.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c