Do While Not rs.EOF
 If Text1(0).Text <> rs.Fields(1) Then
  /*--*--*/
  rs.MoveNext   
 Else
  msg = "コードが重複しています."
  MsgBox msg, vbOKOnly, "重複チェック"
  Text1(0).Text = ""
  Text1(0).SetFocus
 End If
Loop
*------
text1(1) = rs.fields(1)
text1(2) = rs.fields(2)
-------*
データベース(Access)にデータが3件入っていて、例えば、1件目のデータを更新したいのですが今のソースでは、/*--*--*/でデータベースを次々読んでいるので、3件読み終えたときにカレント行が4件目にあると思うので、それを”任意”の行にしたいのですが教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

再びmaruru01です。


もし、Accessのそのテーブルのレコードを、
変更や追加はするが、削除はしない
ということであれば、そのテーブルに新しく数値のフィールドを作って、一番上のレコードから順に、
1,2,3・・・
という風に連番をつけてはどうでしょう。
そうすれば、Findを使って、そのフィールドの値で検索出来ます。
連番は、15個ぐらいなら手入力出来ますし、もし実はレコードが多いということなら、コードで書いて実行してもいいと思います。
では。

この回答への補足

すみませんが、Findの使い方を教えていただけないでしょか?ヘルプ機能がないもので・・・

補足日時:2002/01/30 16:47
    • good
    • 0

こんにちは。

maruru01です。
ちょっとお聞きしたいんですが、
どういう条件で、"5行目"を取り出すのでしょうか。
どこかのフィールドの値がある条件のデータでしょうか。それなら、Findを使えばいいと思います。
それとも、"行数"が問題なんでしょうか。でも、行数は、Accessでテーブルをいじってしまう(ソート)と変わってしまいますけど。
データの内容に関係なく移動するのはMove系(先頭、前、後ろ、末尾)で、任意の条件での移動はFindになります。
補足をお願いします。
では。

この回答への補足

そうですね、”行数”が問題になっています。ACCESSのテーブルはいじらないとおもってください。
今問題になっているのが”データ更新”のところなんですが??
/*** ***/
ここで、データがある文だけ最初から探しているので、例えば、データが10件入っていて、1行目のデータを変更するときは、/###/のところにmovefirstをつかえばいいのですが、3件目のデータとかの場合はどうすればいいのですか??

/*注意*/
textxは1~15までが入っていて、だから15個このようなプログラムがあります。

If Textx(0).Text <> rs.Fields(1) Then
   '重複チェック
   rs.MoveFirst
  Do While Not rs.EOF
     If Textx(0).Text <> rs.Fields(1) Then
        /***
          rs.MoveNext
        ****/   
     End If
   Loop
End If

/#####/

rs.Fields(1) = Textx(0).Text

補足日時:2002/01/30 14:51
    • good
    • 0

まずちょっと変更したほうがいい点です。


>If Text1(0).Text <> rs.Fields(1) Then

↑のような条件判定をレコードごとに行うのはよくありません。
今は3件だけかもしれませんが、1000件のデータを対象にすると
時間がとてもかかります。
SQLでwhere句で条件を指定してもっとレコードを絞り込むべきです。

>それを”任意”の行にしたいのですが教えてください。
なぜ任意にしたいのでしょう。
SQLを再発行するとか、MoveFirstを使用してはだめなのですか?

この回答への補足

それじゃあ、ちょっと言い方を変えます。ACCESSにデータが10件は入っていて、5行目のデータを取り出したいときにはどうすればいいですか?
 
moveXXXでないですか?

補足日時:2002/01/30 09:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QFOR文でtext1,text2,text3...などとどうやって処理させればいいのですか

超初心者な質問ですみません。
たとえばFOR文を使ってtext1~10まで連続に処理させるには
どういったコードを記述すればよいのでしょうか?
初心者用の本やHPを探しても見当たりませんでした。
お願いします。

Aベストアンサー

textエリアをインデックス配列にすればいいです。
Text1のエリアをファーム上でコピーし、貼り付けると
Text1(0)~ Text1(9) の配列になります。
それを
 
(例)

i =0
for i=0 to 9
text1(i) = x
next

のようにすればいいです。

Q「System.Text.RegularExpressions」がない・・・?

お世話になっております。
VB2005 Express Editionユーザーです。

先日こちらの掲示板に質問させていただき、正規表現を使用しての操作方法を教えていただきました。

そのままのコードをとりあえず貼り付けさせていただいてどのような動作をするのか検証したかったのですが、
「System.Text.RegularExpressions」が必要とのことでを参照しようとしましたが当方の環境ではライブラリが見当たりません。

「Imports System.Text.RegularExpressions」とコード先頭に記述すれば、それで参照しているということになるのでしょうか?

先頭に「Imports System.Text.RegularExpressions」と記述すれば、こちらでご提示いただいたコードは何事もなくコンパイルされるのですが、反応している気配がないのです。

当方の環境内で「System.Text.RegularExpressions」を探しましたがありませんでした。

Express Editionということでライブラリが入っていないなんてことはないですよね?
Framework2.0をインストールしなおし、「System.Text.RegularExpressions」を探しましたがありませんでした。

どこかからダウンロードできるのでしょうか?

ご回答お待ちしています。
宜しくお願いいたします。

お世話になっております。
VB2005 Express Editionユーザーです。

先日こちらの掲示板に質問させていただき、正規表現を使用しての操作方法を教えていただきました。

そのままのコードをとりあえず貼り付けさせていただいてどのような動作をするのか検証したかったのですが、
「System.Text.RegularExpressions」が必要とのことでを参照しようとしましたが当方の環境ではライブラリが見当たりません。

「Imports System.Text.RegularExpressions」とコード先頭に記述すれば、それで参照しているという...続きを読む

Aベストアンサー

ライブラリはデフォルトで読み込まれていると思う。
例えばSystem.Text.RegularExpressions.Regexクラスは

http://msdn2.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx

Namespace: System.Text.RegularExpressions
>Assembly: System (in system.dll)

というようにSystem.dllというファイル内にある

#Importsはライブラリの読み込みじゃなくて,
XMLでいう名前空間接頭辞やデフォルト名前空間の設定だと思う

Q4桁の数字を A*1000+B*100+C*10+D 以外で表現したい。

A=1
B=2
C=3
D=4

のとき 
1234をA*1000+B*100+C*10+D以外で表現したいのですが
何かいい方法がないでしょうか?
4桁ならいいんですが
15、6桁を10行ぐらいコーディングしないといけないのでなえてます↓助けてください。

Aベストアンサー

No.4です。

VB2005でも問題なくできますよ。実際に確認済みです。

Dim A As Integer = 1
Dim B As Integer = 2
Dim C As Integer = 3
Dim D As Integer = 4
Dim E As integer

E = (A & B & C & D) * 1
MsgBox(E)

これで試してください。

Qファイル内の(&H0A)を(&H0D0A)に変換したい

改行コードが0A(16進数)となってしまっているファイルを
0D0A(16進数)に変換したいのですが、どのような方法がありますか?
出来れば時間の掛からない方法が知りたいです。

ファイルは、ヤマト運輸の着店コードファイルで件数が3000件ほどあるのですが
改行コードが0AなのでInput#で読み込めません。

ファイルを変更しなくても良い方法があればそれでも結構です。

Aベストアンサー

置き換えてファイルの保存をしたかったのですね・・・

それと、やはり読み込まない事には、置き換えれないですよ。
だって読んでないんだもん・・・


んで、置き換えで保存するのに一番早いのは#2に書いてあるようにまず
「GETで読む」
「Replace関数で置き換える」← 一度でファイル内の文字列を変換できます(VB6仕様)
「PUTでファイルに落とす」
これをファイルの数だけ繰り返す処理になると思います。

大まかにわけると、たった3つの処理で済みます。

QACCESSのFieldの追加方法

VB初心者です。ACCESSのMDBに下記の構文でFieldの追加はできたのですが
少数点以下2桁に設定する方法がわからなく困っています。
Fieldプロパティにも無く、どなたか教えて下さい。

Set field01 = tdfEmployees01.CreateField("Tanka", dbCurrency)
tdfEmployees01.Fields.Append field01

Aベストアンサー

テキストボックスなどのコントロールに対してなら、Decimalplaces = 2 のようにプロパティを設定すればよいのですが、

DA0 で、テーブルの Field オブジェクトに設定する場合には、Properties コレクションに明示的に DisplayControl プロパティを追加してやらないと、VBAから参照できません。
(Access のHELPには、Field オブジェクトのプロパティとして載っていません。)

具体的には、

Dim dbs As Database
Dim tdfEmployees01 As DAO.TableDef, field01 As DAO.Field, prp As DAO.Property

Set dbs = CurrentDb
Set tdfEmployees01 = dbs.CreateTableDef("テーブル名")
Set field01 = tdfEmployees01.CreateField("Tanka", dbCurrency)

tdfEmployees01.Fields.Append field01
dbs.TableDefs.Append tdfEmployees01

Set prp = field01.CreateProperty("DecimalPlaces", dbByte, 2)
Call field01.Properties.Append(prp)

のようになります。
(CreateProperty は、テーブルの Append の後で実行してください。)

テキストボックスなどのコントロールに対してなら、Decimalplaces = 2 のようにプロパティを設定すればよいのですが、

DA0 で、テーブルの Field オブジェクトに設定する場合には、Properties コレクションに明示的に DisplayControl プロパティを追加してやらないと、VBAから参照できません。
(Access のHELPには、Field オブジェクトのプロパティとして載っていません。)

具体的には、

Dim dbs As Database
Dim tdfEmployees01 As DAO.TableDef, field01 As DAO.Field, prp As DAO.Propert...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報