ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

インデックスが重複可のレコードを更新する

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-21 10:04
agility  常連   投稿数: 47
ご指導ありがとうございます。
更新テストをやってみます。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-21 9:43
nkmt  長老   投稿数: 1668
背番号,名前という2項目を用意。
背番号で重複可のインデックス1を用意。
名前で重複可のインデックス2を用意。

7,遠藤 というデータが存在。

リンクW インデックス1
 背番号を位置付け 7〜7
 名前
リンク終了

レコード後処理で、名前を 柏木 へ項目更新。

7,遠藤 というデータは
7,柏木 へ変更され件数は増えない。

これは、7 という背番号で位置付けがなされている分の
書き換えとなる。


---------------------------

7,柏木 というデータがある。

リンクW インデックス1
 背番号を位置付け 7〜7
 名前
リンク終了

レコード後処理で、背番号を 23 へ項目更新。


7,柏木 は
23,柏木 へ変更される。

簡単なテストをしてみてはいかがですか?
頑張って下さい。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-21 8:43
agility  常連   投稿数: 47
レコード後処理で更新しているのは、リンクWで指定しているインデックス項目ではなく、別のキーのインデックス項目を更新しています。更新しているテーブルはインデックスキーを3つ設定していますが、すべて重複可です。

インデックス項目を項目更新するとまずいのでしょうか?
ご回答の程、よろしくお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-21 8:30
nkmt  長老   投稿数: 1668
レコードメインのリンクWの位置付け式、代入式、
レコード後処理でのインデックス項目の項目更新は
どんな感じにしているんですか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-21 8:19
agility  常連   投稿数: 47
リンクWの後、レコード後処理で項目更新をしています。
これがまずいのでしょうか?

度々申し訳ございませんが、お教え下さい。
よろしくお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-21 8:15
nkmt  長老   投稿数: 1668
レコードは既に存在していて追加は無し。

必ず書き換えだけのはず。

という事であれば、リンクWではなく、リンクQでいいです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011-7-20 22:40
nkmt  長老   投稿数: 1668
Pervasiveのデータで、インデックスは重複可が一つだけなんでしょうね。

重複可となってはいますが、重複して欲しく無いんですね。

リンクWで、位置付け小&大、代入式に同じ値さえ
入っていれば同じ値で複数レコード作られる事は無いはずです。

リンクWの後、レコード後処理で項目更新していませんよね?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-20 21:15
nobukoshi802  一人前   投稿数: 118
重複レコードが問題ならリンクを辞めて
レコードメインの後処理で更新するように変更する。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-20 19:31
agility  常連   投稿数: 47
ご回答ありがとうございます。

現状として、インデックスが重複可しか持たないテーブルに
本来は、1件しか存在しないはずのレコードが複数できてしまい
障害となっています。

そこで、インデックスが重複可でリンクWのロジックが怪しいと
思っていましたが・・・・新規レコードが追加されることがない
のであれば、後は、ロジックに問題があるのでしょうか?

このようなことを経験されたことはありませんでしょうか?
障害対応の参考にさせて頂きたいので、ぜひ教えて下さい。

よろしくお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-20 17:53
nkmt  長老   投稿数: 1668
リンクWで、小と大と代入には同じ値を書いている。
実際にそのレコードが存在する。

それであれば、位置付け出来ますし、
新規レコードを追加してしまうことは無いです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-20 17:46
agility  常連   投稿数: 47
度々すみません

リンクWで、小と大と代入には同じ値を書いています。

リンクWで、実際には対象のレコードが存在するが、
位置付けできずに、新規レコードを追加してしまうことは
ないということでしょうか?

ご回答の程、よろしくお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-20 16:49
nkmt  長老   投稿数: 1668
リンクWで位置付けの小と大に同じ値を指定し、
その値で、レコードが存在しなかった場合は追加になります。

位置付け式で指定したレコードが存在した場合は、
そのレコードが更新対象となり追加はされない。

但し、インデックスが重複しているレコードが複数存在した場合
どのレコードを更新するのかわからないです。

普通は、リンクWの場合、位置付け小と大と代入に
同じ値を書く事が最も多いと思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-20 16:31
agility  常連   投稿数: 47
ご回答頂きありがとうございます。

恥ずかしながら、ずっとレコードを更新する時はリンクW
参照する時は、リンクQを使っていました。

もう一つ教えて頂きたいのですが、
重複可のインデックスしか持たないテーブルをリンクWで開き
項目更新した時、既存の更新したいレコードが更新されず
新規でレコードを追加してしまうことはあるのでしょうか?

ご回答の程、よろしくお願いします
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-20 16:15 | 最終変更
nkmt  長老   投稿数: 1668
V7の頃もリンクQで既存レコードに対する書き換えが可能でした。
最新のuniPaaS V1 Plus でもそれは変わっていないです。

存在しない場合は追加、見つかった場合には書き換えを行う場合に
リンクWを使います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-20 15:25
agility  常連   投稿数: 47
ご回答頂きありがとうございます。

存在しているレコードを更新する場合は、リンクWではなく
リンクQで更新するのが正しいのですね。

ずっとリンクQでは、項目の更新ができないと思っていました。
少なくとも、MagicV7の頃はそうだったように記憶しています。
これも間違いだったのでしょうか?

ご回答の程、よろしくお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-20 14:58
nkmt  長老   投稿数: 1668
1番最初の投稿で
「リンクの書込で特定のレコードを更新する」
 とありましたので、
存在しているレコードの書き替えを行いたいんだろうな、と理解してレスしております。

そうであれば、リンクWを使うのは間違いですけど。

重複可のインデックスになっている項目だけを位置付け式に指定しても、レコードの特定は出来ないんじゃないですか?

速度的に遅くなるかもしれませんが、インデックスに含まれない項目も位置付け式に指定せざるを得ないんでしょうね。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-20 13:36
agility  常連   投稿数: 47
現状は、リンクWで位置付けして更新しているのですが、
それをリンクQにするだけで、特定のレコードが更新できる
のでしょうか?
リンクQの場合に、位置付けができればレコードを更新できる
と記憶していますが・・・・勘違いでしょうか?

ご回答の程、よろしくお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-20 13:08
nkmt  長老   投稿数: 1668
リンクWの場合は、レコードの追加も有り得ますが
リンクQはレコードの追加は行いません。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-20 13:06
agility  常連   投稿数: 47
リンク書込みの場合に特定できなかったら、レコードを追加して
しまうと思うのですが・・・・メインファイルに指定して更新する
方法が正解なのでしょうか?

本来は、重複不可のインデックスを追加して特定のレコードを
更新したいのですが、Magicだけでなく他の言語からも更新して
いるので、できない状況です。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-20 11:40
nkmt  長老   投稿数: 1668
リンクQを行い特定出来たのならそれを書き換えるか、
あるいはメインファイルに指定して目的のレコードなら書き換える
という方法で、特定のレコードの更新は可能だと思いますが。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 .6 .7 .8 .9 | 投稿日時 2011-7-20 11:28
agility  常連   投稿数: 47
MagicV9Plusで開発しているプログラムで、インデックスが重複可しかない場合に、リンクの書込で特定のレコードを更新することは
可能でしょうか?

今まで、自分が開発したプログラムでは、
インデックスに重複不可がないテーブルを
更新するようなことは行ったことがないので・・・

どなたかご存じの方、教えて下さい。
よろしくお願いします。
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約