Обновление Записей

Тема в разделе "Delphi - Базы данных", создана пользователем hasp84, 21 янв 2015.

  1. hasp84

    hasp84 New Member

    Репутация:
    0
    Регистрация:
    21 янв 2015
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте !

    к записям в разных таблицах необходимо добавить информацию если подобная строка есть во временной таблице
    проблема заключается в следующем, что обновляется всего одна хотя при обработке процидуры вроде бы как должно обнавиться достаточное количество строк.
    Почему обновляется только одна строка???

    Код:
    unit Unit1;
    
    interface
    
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, DB, ADODB, ExtCtrls, StdCtrls, ComCtrls;
    
    type
    TFrmGlav = class(TForm)	  //Основная форма
    con1: TADOConnection;		//подключение к базе SQL
    qryQuery: TADOQuery;		 //Обновляемые таблицы
    ds1: TDataSource;
    lbl1: TLabel;						//Количество просмотренных таблиц
    btnRun: TButton;
    qryQuery1: TADOQuery;		//для поиска обновляемых строк
    ds2: TDataSource;
    Label1: TLabel;					 //подсчитаное количество обновленных записей
    Label2: TLabel;					 //подсчитаное количество просмотренных записей
    procedure btnRunClick(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    
    var
    FrmGlav: TFrmGlav;
    KeyInform : integer;	 //Количество обновленных строк
    KeyView: integer;		 //Количество просмотренных строк
    implementation
    
    {$R *.dfm}
    
    procedure N27Click(s:string);
    
    procedure expandet(str1:String);
    var d,i:integer;
    
    begin
    FrmGlav.qryQuery1.Active:=false;
    FrmGlav.qryQuery1.SQL.Clear;
    FrmGlav.qryQuery1.SQL.Add('Select Familia, Imia, Otchestvo');
    FrmGlav.qryQuery1.SQL.Add('FROM temp_table');
    FrmGlav.qryQuery1.Active:=True;
    
    FrmGlav.qryQuery.Active:=false;
    FrmGlav.qryQuery.SQL.Clear;
    FrmGlav.qryQuery.SQL.Add('Select Familia, Imia, Otchestvo, inform');
    FrmGlav.qryQuery.SQL.Add('FROM '+str1);
    FrmGlav.qryQuery.Active:=True;
    
    for i:=0 to FrmGlav.ds1.DataSet.RecordCount-1 do
    begin
    for d:=0 to FrmGlav.ds2.DataSet.RecordCount-1 do
    Begin
    KeyView:=KeyView+1;	 //подсчитываем количество проходов
    if (FrmGlav.ds1.DataSet.Fields.FieldByName('Familia').AsString = FrmGlav.ds2.DataSet.Fields.FieldByName('Familia').AsString)
    and (FrmGlav.ds1.DataSet.Fields.FieldByName('Imia').AsString = FrmGlav.ds2.DataSet.Fields.FieldByName('Imia').AsString)
    and (FrmGlav.ds1.DataSet.Fields.FieldByName('Otchestvo').AsString = FrmGlav.ds2.DataSet.Fields.FieldByName('Otchestvo').AsString)
    Then
    Begin
    FrmGlav.ds1.DataSet.Edit;
    FrmGlav.ds1.DataSet.Fields.FieldByName('inform').AsString:='1 необходимо получить бланк';
    FrmGlav.ds1.DataSet.Post;
    KeyInform:= KeyInform + 1; //подсчитываем количество обновлений
    FrmGlav.ds2.DataSet.Next;
    End
    Else FrmGlav.ds2.DataSet.Next;
    end;
    FrmGlav.ds1.DataSet.Next;
    end;
    end;
    
    var
    a:integer;
    begin
    KeyInform:=0; KeyView:=0;
    for a:=1 to 10 do
    begin
    FrmGlav.lbl1.Caption:='обновление таблиц из темп '+IntToStr(a)+' из 10';
    case a of
    1:expandet('tbl1');	 2:expandet('tbl2');
    3:expandet('tbl3');	 4:expandet('tbl4');
    5:expandet('tbl5'); 6:expandet('tbl6');
    7:expandet('tbl7');	 8:expandet('tbl8');
    9:expandet('tbl9'); 10:expandet('tbl10');
    end;
    end;
    FrmGlav.Label1.Caption:= IntToStr(KeyInform)+' обновлено записей';
    FrmGlav.Label2.Caption:= IntToStr(KeyView)+' просмотрено записей';
    end;
    
    procedure TFrmGlav.btnRunClick(Sender: TObject);
    begin
    btnRun.Enabled:=False;
    N27Click('');
    end;
    
    end.
     

    Вложения:

    • Обновление Записей
      1.JPG
      Размер файла:
      15 КБ
      Просмотров:
      33
  2. -master-

    -master- Well-Known Member

    Репутация:
    0
    Регистрация:
    14 янв 2012
    Сообщения:
    617
    Симпатии:
    20
    Зачем эта куча кода? Это все можно сделать быстро 1 запросом.
     
  3. hasp84

    hasp84 New Member

    Репутация:
    0
    Регистрация:
    21 янв 2015
    Сообщения:
    2
    Симпатии:
    0
     
  4. sinkopa

    sinkopa Well-Known Member

    Репутация:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Ну... все 10 таблиц сразу вряд ли конечно... :lol:
    но при обновлении одной таблицы датасеты точно Вам не требуются.
    Вы не указали к какой СУБД коннектися ваш ADO, но в общем случае Ваш код может выглядеть примерно так
    Код:
    // результат - количество обновленных записей
    function expandet(const updTable:string): Integer;
    var
    SQL: string;
    begin
    SQL := 'UPDATE u '+
    ' SET inform = "1 необходимо получить бланк" '+
    'FROM '+ updTable +' u '+
    ' INNER JOIN temp_table t '+
    '	ON u.Familia  = t.Familia '+
    '	AND u.Imia	 = t.Imia '+
    '	AND u.Otchestvo = t.Otchestvo ';
    
    FrmGlav.qryQuery1.Close;
    FrmGlav.qryQuery1.SQL.Text := SQL;
    try
    FrmGlav.qryQuery1.ExecSQL;
    Result := FrmGlav.qryQuery1.RowsAffected;
    except
    Result := 0;
    end;
    end;
    
    procedure TFrmGlav.btnRunClick(Sender: TObject);
    const
    tbl: array[1..10] of string = ('tbl1','tbl2','tbl3','tbl4','tbl5',
    'tbl6','tbl7','tbl8','tbl9','tbl10'
    );
    var
    i,KeyInform, KeyView: Integer;
    begin
    KeyInform := 0;
    KeyView := 10; // все же 10 будем смотреть... правда ведь? :-)
    
    for i := 1 to 10 do begin
    FrmGlav.lbl1.Caption := Format('обновление таблиц из темп %d из 10',[i]); // ? нахрена ? :-)
    Inc(KeyInform, expandet(tbl[i]));
    end;
    
    FrmGlav.Label1.Caption:= Format(' %d обновлено записей',[KeyInform]);
    FrmGlav.Label2.Caption:= Format(' %d просмотрено записей',[KeyView]);
    
    end;
     
Загрузка...
Похожие Темы - Обновление Записей
  1. Max40
    Ответов:
    17
    Просмотров:
    278
  2. Hehabr
    Ответов:
    0
    Просмотров:
    223
  3. midnight__spark
    Ответов:
    23
    Просмотров:
    912
  4. Петручо
    Ответов:
    4
    Просмотров:
    335
  5. Vander
    Ответов:
    12
    Просмотров:
    1.761

Поделиться этой страницей