こんにちわ、jixyoji-と申しますm(._.)m。

VBをやっていてOracleサーバーとの連動処理で困ってることがあります。

フォームデザインでは商品マスタデータの「商品ID」、「商品名」、「単価」の3つのデータをテキストボックスへ表示しそして「先頭へ」、「前へ」、「次へ」、「最終へ」というコマンドボタンと連動させてコードを作成してるのですが、そのフォーム内にもう1つLabelを作成し商品マスタデータ12件の内容の何件目を表示させるか、「1/12」を最初にして2件目なら「2/12」、3件目なら「3/12」として動かしたいのですがどうすれば宜しいでしょうか(+_+)?

宜しくお願いしますm(__)mペコ。

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

A 回答 (4件)

こんにちは。



SQLのselect句に、count(*) を追加すれば、総件数が出ます。
あとは、プログラム内に、いまなんページ目かを保存するポインタ(整数値)を設け、ボタンをトリガーにして、カウントをおこなえばよいのではないでしょうか?

それを、Label.caption なりに、表示してあげてください。

でわ
    • good
    • 0
この回答へのお礼

御礼が遅くなって申し訳ございません(゜゜;)\(--;)オイオイ。

やはりこちら側の質問の情報が足りないと要求どおりの「ズバリ、これだ!」と言うのがなかなか返ってこないような気がしました\(__ ) ハンセイ。最早プログラミングはど素人の領域でして・・・・恥ずかしながらイメージが未だに会得できていないんですよね・・・・(;_q))クスン。
どうやったらHaizyさんのように専門家になれるのか習得方法を肖りたいものです(/。\)。

本当に御礼が遅くなって申し訳なかったのと回答ありがとうございましたm(__)mペコ。

お礼日時:2002/02/02 09:35

レコード総数は Count(*) で、現在のレコード番号は ROWNUM で取得できます。


SELECT *,ROWNUM
FROM TABLE1
という感じです。
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまったのをお詫び申し上げますm(._.)m。

ROWNUMですか・・・・こ・・・これは習っていない方法だ・・・・( ̄□ ̄;)!!。しかし、おっしゃっている内容だけでは充分にまだこちらも理解できないし、それをどこでどのように使用すれば良いのかが・・・・わ・わからない(((・・ )( ・・)))。
教えていただいた内容をさらにつきつめて勉強していきます(^^ゞ。

遅くなって申し訳ありませんでした。もし質問がまたあった場合宜しく御願いしますm(_ _)m。

お礼日時:2002/02/02 09:44

仕様がよくわからないので何とも答えがたいのですが、



簡単な例としては、
1.全件数を取得する。(⇒x)
2.主キーの昇順で先頭1件を取得し1/xとする。
3.以後「次へ」又は「前へ」を押す度に主キーをシフトして表示いく。
4.先頭、最後尾は主キーの最大値、最小値を使用して取得する。
以上、簡単にですがこんな感じでどうでしょう?
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまったのをお詫び申し上げますm(._.)m。

はぅ~プログラミングは中々習得できなくて日々気持ちが落ち込んでいます(T△T)。その「仕様」も何を具体的に言っているのかがわからないんですよね~(×_×;)。色々これ以外にも違う言語でやるはめになっていて方々色んなHPを閲覧するものの四苦八苦している状況です。
これから質問内容をもっと正確に書いて、自分が何をしているのかを具体化できるようにまずしたいと思います(∋_∈)。

本当にどうもありがとうございましたm(__)mペコ。

お礼日時:2002/02/02 09:41

オラクルとの接続方法を教えてください

    • good
    • 0
この回答へのお礼

御礼が遅くなって申し訳ありませんm(._.)m。

もう何がなにやらわけがわからない状況でして( ;^^)ヘ..。接続方法と言われましても・・・Servletなのかな;^_^A。よくわかりません┐('~`;)┌。とりあえず頑張ります。

どうもありがとうございました(-。-;。

お礼日時:2002/02/02 09:30

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

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

Q[VB.NET]3つ以上のフォームを一つずつ表示し、最後のフォームを閉じた時に最初のフォーム以外のフォームを閉じる

VB.NETを学んでいるのですが、現在3つ以上のフォームを表示していくものを作ろうとして躓いたことがあったのでこちらに書き込みました。
内容としては、ボタンを押して次のフォームを表示していくものです。

動作の流れは以下のように考えています(フォームはA、B、Cの3つとする)
1.Aを表示
2.Aでボタンを押してBを表示し、Aは隠す
3.Bでボタンを押してCを表示し、Bは隠す
4.Cでボタンを押してBとCを閉じ、隠していたAを表示

隠すのはHideを用いてできたのですが、4.でCのボタンでBとCを一緒に閉じてAを表示させる方法がわかりませんでした。

1~4のように動作させるにはどうすればいいか教えてください

Aベストアンサー

まとめて考えるのではなく、分けて考えた方がコーディングもしやすくなります。

[ FormA の処理 ]
1. ボタンを押したら FormB を開き、自身を Hide する。
2. FormB が閉じられたら、自身を Show する。

[ FormB の処理 ]
3. ボタンを押したら FormC を開き、自身を Hide する。
4. FormC が閉じられたら、自身を Close する。

[ FormC の処理 ]
5. ボタンを押したら、自身を Close する。

ポイントは、親フォーム側で子フォームのFormCloseを捕らえるところです。FormBからFormAを、とか、FormCからFormAとFormBを・・・と考えるとややこしくなります。上記のように処理すれば、FormBはFormAの動作を気にする必要はありませんし、FormCもFormBやFormAの動作を気にする必要はありません。子フォームのFormCloseはWithEvents宣言すれば捕らえられます。

以下、簡単なコードを。ボタン配置が面倒だったので、フォームのクリックで動作します。


' [ FormA の処理 ]
Public Class FormA
Inherits Form

Public Sub New()
Me.Text = "FormA"
End Sub

Private WithEvents frmFormB As FormB

' 1. ボタンを押したら FormB を開き、自身を Hide する。
Private Sub FormA_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
frmFormB = New FormB
frmFormB.Text = "FormB"
frmFormB.Show()

Me.Hide()
End Sub

' 2. FormB が閉じられたら、自身を Show する。
Private Sub frmFormB_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles frmFormB.FormClosed
frmFormB = Nothing
Me.Show()
End Sub

End Class

' [ FormB の処理 ]
Public Class FormB
Inherits Form

Private WithEvents frmFormC As FormC

' 3. ボタンを押したら FormC を開き、自身を Hide する。
Private Sub FormB_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
frmFormC = New FormC
frmFormC.Text = "FormC"
frmFormC.Show()

Me.Hide()
End Sub

' 4. FormC が閉じられたら、自身を Close する。
Private Sub frmFormC_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles frmFormC.FormClosed
frmFormC = Nothing
Me.Close()
End Sub

End Class

' [ FormC の処理 ]
Public Class FormC
Inherits Form

' 5. ボタンを押したら、自身を Close する。
Private Sub FormC_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Me.Close()
End Sub

End Class

※VB2005で書いたコードなので.NETでそのまま動くかは不明・・・。

なお、あくまで考え方のひとつなので、他にも方法はあります。

まとめて考えるのではなく、分けて考えた方がコーディングもしやすくなります。

[ FormA の処理 ]
1. ボタンを押したら FormB を開き、自身を Hide する。
2. FormB が閉じられたら、自身を Show する。

[ FormB の処理 ]
3. ボタンを押したら FormC を開き、自身を Hide する。
4. FormC が閉じられたら、自身を Close する。

[ FormC の処理 ]
5. ボタンを押したら、自身を Close する。

ポイントは、親フォーム側で子フォームのFormCloseを捕らえるところです。FormBからFormAを、とか、FormC...続きを読む

Q【VB6.0】 あるフォームから他のフォームへ値を受け渡したい

タイトルの通り、あるフォームから他のフォームに値の受け渡しを行いたいのですが、どのようにしたらよいのでしょうか??

以下のようなコードできんのかなぁ~~って、やったみだけど、
むりでした。。サンプルコード内でいうParamsのような値を
受け渡しさせたいのですが・・・。ご存知の方、申し訳ないですが
教えて頂けると非常にありがたいです。それと、、私はVB初心者です。

---FormA---
Public Params as new Params

Private sub Command1_Click()
Call Me.Hide
FormB.Show vbModeless, Me
End sub

---FormB---
Private Sub Form_Load()
'Owner.Paramsのような形で参照できるかと思ったができませんでした。

End sub

Aベストアンサー

こんにちは。

 下記サイトをご参照下さい。
  http://www005.upp.so-net.ne.jp/h-masuda/vb6/vb6first/forms040.html
   簡単に渡すには、グローバル変数を使えばよいと思います。
   別な方法では、FprmAにPrrams変数を参照するためのPublic関数を作り、FormBからその関数を呼び出して参照することも出来ると思います。

では。

Q現在2017/4/1から2018/3/31までの日月の入った表があります。ボタンを押すと1年足されて

現在2017/4/1から2018/3/31までの日月の入った表があります。ボタンを押すと1年足されて2018/4/1から2019/3/31になる VBAを教えてください。
よろしくお願いします。

Aベストアンサー

ANo3です。

>この様場合どうすれば自動で2/29が入りますか。
データをシリアル値(=Date型)で持つようにしているなら、うるう年は自動的に2/29日が表示できます。
(前回回答の式の表示調整の仕組みをご覧ください)

それよりも、
>表は一月ごとに区切ってあります。
・・という条件は、ご質問文には記載されていませんでしたので、ANo3で提示した式はA列に一年分がズラ~っと並ぶ前提で作成した式になっています。
(うるう年はきちんと反映されますし、翌年度に当たるセルは空白になる関数式になっています)

ひと月ごとに区切って記載するのであれば話が全然違うので、各月用に式を作成し、その月の分だけ表示できる式にしておく必要がありますね。
(添付写真では部分的にしか見えませんが、小計の行やそれ以外にも異なる種類の行が間に入っているようですので…)

>2/28から3/1の間が4行空いてます
添付の写真では2/28から3/1の間は11行空いているように見えますが…???


>表は一月ごとに区切ってあります。
2月を例に考えれば、通常は28日までで以下は空白、うるう年は29日まで表示して以下は空白になれば良いものと解釈しました。(上記の「4行」云々は意味不明なので無視しています)
そのようにするには「その月の範囲」を条件にして、あとは空白になるようにしておけば良いです。
(ANo3は年度外は空白になるようにしてありますが、それを月単位にすれば良い)

例えば2月の場合の例を挙げるとして、
前回同様に、A1セルに平成年度が数値であるものと仮定すれば・・・
その先頭(2/1)のセルには
 =DATEVALUE("h"&$A$1&"/2/1")
次のセルには
 =IF(前のセル<DATEVALUE("h"&($A$1)&"/3/1")-1,前のセル+1,"")
として31日分フィルコピーすれば、ひと月分が表示されるはずです。
(「前のセル」とあるのは2/1を表示しているセル番地のことです)

上記の式だと12か月分に対して、月の部分を少しずつ変えた式を作成する必要がありますが、セル範囲に規則性があったり、月を示すタイトルがどこかにあるような場合は、それを利用することで全部の月で同じ関数式にすることも可能です。
などと言っているよりも、事前設定の1回こっきりの作業だと思いますので、個別に設定してしまった方が早いですし、2月以外は日数が固定なのでもっと簡単な式にでき、他の月に関しては、
 = 前のセル+1
という式で、必要な範囲にフィルコピーすれば十分なはずです。

ANo3です。

>この様場合どうすれば自動で2/29が入りますか。
データをシリアル値(=Date型)で持つようにしているなら、うるう年は自動的に2/29日が表示できます。
(前回回答の式の表示調整の仕組みをご覧ください)

それよりも、
>表は一月ごとに区切ってあります。
・・という条件は、ご質問文には記載されていませんでしたので、ANo3で提示した式はA列に一年分がズラ~っと並ぶ前提で作成した式になっています。
(うるう年はきちんと反映されますし、翌年度に当たるセルは空白になる関数式になっていま...続きを読む

Q1フォルダに「A.xls」、「B.xls」、「C.xls」・・・とある

1フォルダに「A.xls」、「B.xls」、「C.xls」・・・とある場合、
すべてのファイルに一斉にA1セルに「a」という文字を反映させる場合の
VBAプログラムを教えていただけますでしょうか?
よろしくお願いいたします。

Aベストアンサー

フォルダ名を変更してから試してね
4行目の
mPath = "C:\tmp\"
「aaa」なら
mPath = "C:\aaa\"
に変更


Sub test()
Dim mPath As String
Dim nf As String
mPath = "C:\tmp\"
nf = Dir(mPath & ".xls")
Do While nf <> ""
Workbooks.Open Filename:=mPath & nf
Workbooks(nf).ActiveSheet.Range("a1").Value = "a"
Workbooks(nf).Close SaveChanges:=False
nf = Dir()
Loop
End Sub

簡単なコードにしてあるので、分らない所はヘルプで調べてね
参考まで

QLabel2.visible=false

任意の関数式を入れるとグラフを描くプログラムを作りました。表示するのに時間がかかる(といっても1秒程度ですが)ので「計算中!」と赤で表示させ、グラフが描き終わると消したいと思い、グラフ開始時にLabel2.Visible=True、終了時にLabel2.Visible=Falseを付けましたが、思惑通りには行きません。何故でしょう。おわかりになる方、教えてください。

Aベストアンサー

.NET以降,DoEvents (System.Windows.Forms.Application.DoEventsメソッド) の使用は推奨されません。
DoEventsはVB6までやVBAのような,マルチスレッドが扱えない言語における代替策でしかなく,
長時間かかる処理 (だいたい50ms:WinRT APIにおける非同期処理の目安) を超えるようであれば,その処理はバックグラウンドスレッドで処理すべきです。

VB 2005以降であれば,BackgroundWorkerコンポーネントをFormに配置し,
・Label2.Visible = False後,配置したBackgroundWorkerのRunWorkerAsyncメソッドを呼び出す
・グラフの点の計算をBackgroundWorkerのDoWorkイベントに記述する。
※このイベントの中で,Formのコントロールやコンポーネントに触ることができないので注意して下さい。
・BackgroundWorkerのRunWorkerCompletedイベントで,グラフの描画やLabel2.Visible = Trueを行う。
という方法で処理を行います。
# VB 2012以降で.NET 4.5以降をターゲットとする場合では,Async/Awaitを使う方法が推奨されます。

ref) MSDN: 方法 : バックグラウンドで操作を実行する
http://msdn.microsoft.com/ja-jp/library/hybbz6ke.aspx

.NET以降,DoEvents (System.Windows.Forms.Application.DoEventsメソッド) の使用は推奨されません。
DoEventsはVB6までやVBAのような,マルチスレッドが扱えない言語における代替策でしかなく,
長時間かかる処理 (だいたい50ms:WinRT APIにおける非同期処理の目安) を超えるようであれば,その処理はバックグラウンドスレッドで処理すべきです。

VB 2005以降であれば,BackgroundWorkerコンポーネントをFormに配置し,
・Label2.Visible = False後,配置したBackgroundWorkerのRunWorkerAsyncメソッドを呼び...続きを読む


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

おすすめ情報