Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Почему возникает ошибка при редактировании таблицы через 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
4-1116860405
XCept.ion
2005-05-23 19:00
2005.07.18
Наиболее часто исп. проги


3-1117916546
новичок из сыктывкара
2005-06-05 00:22
2005.07.18
фильтрация данных


4-1116498180
iskatel
2005-05-19 14:23
2005.07.18
служба доступа к файлаи принтерам


4-1116593693
Rius
2005-05-20 16:54
2005.07.18
Панели групп как в Windows Explorer через MS Visual Styles API ?


3-1118052125
Леонид
2005-06-06 14:02
2005.07.18
SQL запрос