LuzBlue の回答履歴
- こんにちは、VBはじめたての初心者です。MSCommコマンドを利用して
こんにちは、VBはじめたての初心者です。MSCommコマンドを利用してマイコンと 通信するプログラムを作成中なのですが、わからないことがあるので質問させていただきます。 public aub form_load() MSComm1.CommPort = 3 'ポート番号設定 MSComm1.Settings = "115200,N,8,1" '設定 MSComm1.PortOpen = True 'ポートオープン MSComm1.Handshaking = comNone 'フロー制御無し MSComm1.RTSEnable = False 'RTS制御無し MSComm1.RThreshold = 1 '1バイト受信毎にOnCommイベント発生 Dim txBuffer As String End sub 'テキストに表示した受信文字列を変数に格納、さらに必要な文字列だけ抽出する Private Sub botan_Click() txBuffer = Text2.Text x = InStr(1, txBuffer, "e" & vbCrLf, 1) txBuffer = Mid(txBuffer, x + 3, (Len(txBuffer) - (x + 2))) Text1.Text = txBuffer 'txBufferの内容確認用 End Sub Private Sub cmdr_Click() Text2.Text = "" MSComm1.Output = "r a0 s 00 j ff" & Chr(13) 'マイコンのデータを読み込むコマンド End Sub Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive Buffer = MSComm1.Input Text2.Text = Text2.Text & Buffer ・ ・ ・ End Select End Sub おおざっぱですがこのようなプログラムをつくりました。 目的は受信された文字列(テキストに表示)を変数に格納、さらに必要な文字列だけ抽出する ことなのですが、このプログラムだとデータを読み込むコマンドを送るボタンとそのデータを 変数に格納して必要な部分を抽出するボタンを二回押さなければならず面倒なので、botan_Click() の中の命令をそのままcmdr_Click()に入れたのですが、そうするとエラーが出てしまいます。 いろいろと試したのですがどうやらtxBufferの中に受信データが入ってくれないみたいです。 原因は何か。何かいい方法がないかアドバイスいただけたら幸いです。 やりたいことは、一回のボタンクリックで変数に受信データのほしいとこだけを格納させることです。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- kanamu22
- 回答数1
- MYSQLのクエリの最適化について
最近データベースというものを知り、色々試しているのですが、意外と時間がかかっています。 どのようにすると、より短時間で値を調べることができますでしょうか? 行いたい操作は、下記tbleから、 「cntのうち最も小さい数字を選び出す。同一値のcnt中から、最も大きなidの、id,name,cntを選び出す。」 「次に、途中perlでid,name,cntをprint。」 「次に、呼び出したcntに+1を行い保存です。」 です。 ネット上で調べ色々試したところ下記の方法で値は調べられたのですが想像以上に時間がかかっています。 是非アドバイス頂けないでしょうか。 宜しくお願い致します。 MySQL ver:4.1 SELECT id,name,cnt FROM tble ORDER BY cnt ASC,id DESC LIMIT 1; perlでid,name,cntを取得してprint "${id} ${name} ${cnt}"; UPDATE tble SET cnt = cnt + 1 WHERE id=${cnt}; ------tble----- id name cnt 1 mojiretsu1 0 2 mojiretsu2 5 3 mojiretsu3 4 4 mojiretsu4 1 以下、1000万行続きます。
- MYSQLのクエリの最適化について
最近データベースというものを知り、色々試しているのですが、意外と時間がかかっています。 どのようにすると、より短時間で値を調べることができますでしょうか? 行いたい操作は、下記tbleから、 「cntのうち最も小さい数字を選び出す。同一値のcnt中から、最も大きなidの、id,name,cntを選び出す。」 「次に、途中perlでid,name,cntをprint。」 「次に、呼び出したcntに+1を行い保存です。」 です。 ネット上で調べ色々試したところ下記の方法で値は調べられたのですが想像以上に時間がかかっています。 是非アドバイス頂けないでしょうか。 宜しくお願い致します。 MySQL ver:4.1 SELECT id,name,cnt FROM tble ORDER BY cnt ASC,id DESC LIMIT 1; perlでid,name,cntを取得してprint "${id} ${name} ${cnt}"; UPDATE tble SET cnt = cnt + 1 WHERE id=${cnt}; ------tble----- id name cnt 1 mojiretsu1 0 2 mojiretsu2 5 3 mojiretsu3 4 4 mojiretsu4 1 以下、1000万行続きます。
- セグメンテーションエラーの原因がわからず困っています。
こんにちは。 プログラムを実行すると「セグメンテーションエラー」と表示されほとほと困っています。力を貸して頂けないでしょうか。 以下がそのプログラムです。 #include<string.h> #include<unistd.h> #include<errno.h> #include<signal.h> #include<sys/types.h> main(){ FILE *fp,*fp2; int a; pid_t pid; pid = fork(); if(pid == 0){ fp = popen("tcpdump 'tcp[13] & 255 == 2' > file.txt","r"); system("sleep 1"); kill(pid,SIGTERM); } else{ fp2 = popen("wc -l file.txt","r"); fscanf(fp2,"%3d",a); printf("%d",a); } } プログラムの内容は、子プロセスとして動かしたtcpdumpにより出力されたfile.txtの行数を表示するものです。 tcpdumpを子プロセス化したのは、killコマンドで終了しないと止まらないからです。 以上で何か気づかれた事等ありましたら、是非ご教授いただきたいのですが可能でしょうか。環境はCentosです。どうぞよろしくお願いします。