<%= ASP総合 %> Par ..
[2ch|▼Menu]
237:nobodyさん
05/12/03 00:00:48
>>234

Request とか Session は ASP Built-In Objects だから扱いが別。
Request.Form("checkbox") は IStringList ってオブジェクトだったと思う。
Count で要素数
Item(n) で各要素 (n >= 1)

フォームで送られてくるデータは name と value の組の単なるテキストだから
checkbox かどうかを判別する方法なんてそもそも存在しないよ。

238:nobodyさん
05/12/03 01:03:29
>>237
Request.Formはコレクションジャマイカ?

239:nobodyさん
05/12/04 20:53:53
Request.Form と Request.Form("checkbox") は違う

240:NT4.0
05/12/06 15:14:51 A31iTPx+
運用してるサーバが、突然、
「HTTP/1.1 新しい Session の作成に失敗しました」というエラーは吐くようになりました
原因わかる方いましたら、お願い致します




241:nobodyさん
05/12/06 15:18:22
メモリ不足?
一回再起動してみたら?

242:240
05/12/06 16:32:32 A31iTPx+
すいません
NT4 じゃなくて、2000 Server でした

再起動したら直ったんですけど、
原因不明のままだと、チトまずいんで・・・

243:nobodyさん
05/12/06 17:11:53 XSSghKFO
教えてください。
そこそこ閲覧のあるHPを公開したとして、ソースはなるべく短くし、DBとのやりとり(ストアド等)の数を減らしたり
してあげたほうがユーザー側にも、サーバー側にも負担って少ないですよね?
aspx.vbのソース行数を見ると1000行を軽く突破する勢いなんですが、多すぎますか?
ちなみに目標は1日1万ページビューで、SQL-SERVER+XPです


244:nobodyさん
05/12/06 17:48:36
>>242
セッションが新規作成できないくらいに、メモリ使ってるとか?
メモリを使って開放してないとか?

>>243
そこそこの定義がわからん。
1000行なんてコンマ何秒の処理だろ。

245:243
05/12/06 17:50:50
>>244
わかりにくくて申し訳ないです。
そこそこ=目標は1日1万ページビューです
ちょっと安心しました

246:nobodyさん
05/12/06 17:51:32
>>243
aspx.vbはスレ違いだが…
まあソースは短いに越したことは無いが、
1000行程度ならそう長い訳でもないだろう。
ASP.netならなおさらクラス定義やなんやかんやでソース上で行数食うしね。

DBとのやり取りも回数を減らすに越したことは無いが、
大抵はそれより「途中で無駄なデータを発生させない」ように
気をつけておいた方がいい。
たとえば20件ごとに表示するのに、データ全行取り出して
要らない部分を空読みしてスキップ、
というようなことをやるとデータが増えるにしたがってたちまち重くなる。

247:nobodyさん
05/12/06 19:00:09
ソースが短いからといって負荷が軽いとは言えない。

248:nobodyさん
05/12/06 21:58:25
asp.netってコンパイルするんでしょ?
じゃぁ1000行なんて余裕でしょ。

多少長くても、定義やセッションの切断とかを明確に書いた方が早いことが多いよ。

249:nobodyさん
05/12/07 00:47:24
>>248
実はレガシASPも実行時はコンパイルされてるぢょ

250:nobodyさん
05/12/07 11:04:22 Q9Fd97MO
a = Split(b, ",")
nCnt = 0

' EOFまでループ
Do Until OnjRS.EOF

 ' DBからの値を格納
 hoge = NVL(ObjRS.Fields("hoge_id").Value, 0)
 
 ' 配列aのnCnt番目の値が、DBからの値と同じ時だけ、cに代入
 If a(nCnt) = hoge Then
  c = "ifの中"
 End If

 OnjRS.MoveNext

Loop

a(nCnt)部分でエラーが出ます。
過去ログなどから、UBoundで配列の最大要素番号を指定してから出ないと
エラーになることはわかったのですが、
実際、どのように書いたらいいのかわかりません…。

251:250
05/12/07 11:36:40
解決しますたm(__)m
激しく勘違いを…(((;゚Д゚))) ガクガクブルブル…

252:228
05/12/07 17:23:06
すみません、レス遅れました…

>>235
カンマ区切りの文字列を分解して配列にするイメージっすね。
チェックボックスがチェックされていなかったり、
一箇所のみチェックだったりしても split はエラーを返さないんですね

>>236
なるほど、やっぱり二種類あるんですね…
いまいち二種類を使い分ける方法がよくわかってません。
恐らくその種類によって使えるメソッドも変わるんでしょうね…

>>237
checkbox かの判断の意図は、
チェックボックスかがすぐわかれば、それでループかけて
どこがチェックされてるか調べることができるのかなと。
(PHPでは連想配列で入ってくれてたので、キーの指定だけで判断できました)
みなさんはどうされてるんですかね??
(というか普通はどうするものなんだろう…)

何か簡単なフォームASPのサンプルって転がってないですかねぇ…
VBScriptがなかなかなじまない…

253:228
05/12/07 17:34:56
結局のところ、フォームからのクエリを処理するために、
Request.Form の値を、
Set Query = CreateObject("Scripting.Dictionary")
とした連想配列(オブジェクト?)Queryにコピーしてから処理してます。

一般的にクエリを取得する場合は、Request.Form の 100KBの壁は無視されるのでしょうか?
それとも、ADO.Stream か BASP21 のようなツールを使って
Request.BinaryRead(Request.TotalBytes) からちゃんととるのでしょうか?

それと、ASPで連想配列を使いたい場合は、
Set Query = CreateObject("Scripting.Dictionary")
が一般的でしょうか?
また、連想配列の連想配列の場合は、
-----
Dim a1, a2
Set a1 = CreateObject("Scripting.Dictionary")
Set a2 = CreateObject("Scripting.Dictionary")
a2.add "key", "value"
a1.add "key", a2
Response.Write( a1.item("key").item("key") & "<hr>")
-----
な感じでやっています。
(変なことしてないかな…

すみません、ご指摘いただければと思います。

254:nobodyさん
05/12/07 19:51:07 +pnCfHBy
流れをぶった切ってADSIの質問をさせください。

ASPでユーザー認証を行うため、以下のプログラムを作成しました。
環境はWin2003サーバーとFreeBSD+Samba3.0+OpenLDAPで、
ドメインに信頼関係を持たせています。
以下のプログラムはSambaの握っているOpenLDAPを覗きに行っています。

strPath = "LDAP://xxx.xxx.xxx.xxx/ou=AAA,dc=BBB,dc=CCC"
strUser = "ユーザー名"
strPassword = "パスワード"

Set objDSO = GetObject("LDAP:")
Set objUser = objDSO.OpenDSObject( strPath, strUser, strPassword, 1)

どこをどう変えても動きやがりません。エラー '80072032'とのたまいます。

また、普通に
Set user = GetObject("LDAP://〜〜適当に〜")
としてuser(sambaSamAccount型)を取得した場合に

name = user.Get( "cn" )

とするとユーザー名が取れるくせに、

pass = user.Get( "sambaNTPassword" )

とするとエラー '8000500c'
ディレクトリのデータ型と、ネイティブ DS のデータ型を相互に変換することはできません
とのたまいやがります。

どなたか同じようなことで悩んだ方、よろしくおねがいしやすm(__)m

255:nobodyさん
05/12/07 22:18:10
>>228
複数のcheckboxがある場合はASPでは>>235みたいにするのが普通だと思う。
splitの後にisArrayで配列になったかのチェックをすればいい。

それと、おせっかいだとは思うが
Dictionaryは確かに便利だがその使い方は無駄だと思う。
Dictionaryを入れ子にしたりして美しくデータを確保してる余裕があったら
さっさとResponse.Writeしていくべき。
基本的にWebプログラムの振る舞いの一般論として
一つのスレッドで大量のメモリを確保するような設計は推奨されない。

それと100KBの壁にずいぶんこだわっているようだが
一体どんな使い方をしようとしているのか?
普通に使っていて一つのinputで100KBに達することは
まず無いと思うのだが。

>>254
cn=ユーザ名, を加えればいいんじゃない

256:228=252=253
05/12/08 00:07:26
>>255

ご指摘ありがとうございます。
Split の後に isArray、参考になります。

PHP,Perl-CGI で書く時は、フォームのチェックボックス名の
連想配列を作って、そのキーがあるかないかで判断していたので
ASPでも同じ手法でやろうとしてました。

Dictionary等でデータの格納方法に気を使うよりは
素直にprintしてくって指摘も一理ありですね。。

また、100KB についてですが、確かにファイルアップが無ければ
滅多に超える容量ではないとは思うんですが、100KB の制限が
あるものを使うのも設計上どうかと思ってます。
どのようなフォームでも大丈夫なように、制限の無いものがあるのであれば、
あらかじめそれを使いたいってのが本心です。
でも実際のところはどうなのかな?と疑問に思ってました。
別のモジュールが必要だったり、制限があっても気にしないのが
ASPとして一般的であれば、それに越したことは無いので。。


257:nobodyさん
05/12/08 21:04:01
BASPのFormメソッド使うやり方だと
100KBの壁を超えられるのかも・・・?

バグが無ければだけどナー


258:nobodyさん
05/12/09 19:40:03
ASPのフォームでメールアドレスを入力させるときに
ドメインがちゃんと存在するかをチェックしたいと思っています。
VBScriptにMXレコードを見るなどのモジュールは存在しますか?

259:nobodyさん
05/12/09 21:28:20
>>258
あるべ。VBScriptにはないけど。

260:nobodyさん
05/12/09 22:28:32
標準で頑張るには裏でWScript.Shell使ってnslookupを実行する、
とかになるのかな?

261:258
05/12/12 15:52:11
>>260
ありがとうございます。
標準ではnslookupからひくしかないんですね。
戻り値の判断が非常にむずかしそう…
>>259
VBScriptではきついってことでしょうか?
何か方法があれば教えていただけると助かります


262:nobodyさん
05/12/13 06:38:36
>>261
VBScriptにはネットワークにアクセスするメソッドがないからね

BASP使ってSocketで何とかするか…
またはVBでDLL作っちゃっても良さそうだけどね

263:nobodyさん
05/12/13 21:54:09
>>261
DNSから引くって考えるより、実際にメールを送信してみた方が早いかも。
ドメインがなければサーバエラーを受け取れるし。

264:nobodyさん
05/12/16 14:00:18 ys2aEO8I
初歩的な質問かもしれませんが

フォームで価格を送信して貰う→数字以外の値が入力されていた場合、エラー表示
ができません。

TypeName関数では無理だったのですが分かる方いたら教えて下さい。


265:nobodyさん
05/12/16 18:50:57
>>264
isNumeric

266:nobodyさん
05/12/16 19:57:23
>>264
isNaN

267:nobodyさん
05/12/17 02:17:00
>>265-266
できました
本当にありがとう



268:nobodyさん
05/12/24 16:15:38
特殊文字「"#$%&'()」のような文字を弾く(エスケープ)するには、
HTMLEncodeを使用する以外の方法はあるんでしょうか?


269:nobodyさん
05/12/24 18:06:46
>>268
つString型

270:nobodyさん
05/12/24 20:17:32
>>268
そういう特殊文字をどうしたいの?
textboxとかに入力されたそういう文字を何とかしたいのか、
そういう文字を画面に出したいのか、
querystringで渡すときにおかしくならないようにしたいのか、
input type=textの初期値として設定したいのか。
「特殊文字を弾く」なんていう日本語では何をしたいのか全く通じない。

>>269
VBScriptにそんな型なんかねえよ

271:nobodyさん
05/12/24 21:47:32
>270
まぁまぁ。
TypeName("aaa")は"String"を返してくるんだし。

272:nobodyさん
05/12/25 02:25:45
>>270
君のような融通のきかない馬鹿はエンジニアとして失格。

273:nobodyさん
05/12/25 07:52:31
>>272みたいに融通を利かせてしまう奴が
東証のシステムみたいなのを作ってしまうんだろうな。

274:nobodyさん
05/12/25 11:42:36
>>273
なるほど。>>270が融通のきかない馬鹿な使えないエンジニアであることは
認めるわけですな。ご苦労さん。

275:nobodyさん
05/12/25 11:44:05
>>273
え? 東証のシステムのどこがおかしいの?
おかしいのは周辺の人間であってシステム自体は至極まっとうなもの。

やっぱお前だめだよ。まともなシステムに関わったことないんだね。
カワイソス

276:nobodyさん
05/12/25 18:50:40
なんか香ばしくなってきてるな。

>>270の指摘は、言葉はくどくて感じ悪いが言っている事は至極真っ当だと思う。
>「"#$%&'()」のような文字
って、確かにどれもアルファベットや数字の類ではないけど
それらを十把一絡げに「特殊文字」と呼んで「弾く(エスケープ)」
と言われても何についてのことだか分からない…。

277:276
05/12/25 18:57:56
なんか傍から見てると
>>270=言葉遣いがきつく対人能力は低そうだが仕事は細かい使えるPG
>>272=大雑把な雰囲気だけ指図して満足、
     その後PGから指示漏れを指摘されると逆切れして相手を馬鹿扱い…
     という使えないSE
みたいに見えるんだけどw

しかも
>>274 11:42:36
>>275 11:44:05
これ明らかに>>272の自演だろw

278:nobodyさん
05/12/25 23:10:43
>>277
いや、自作自演じゃないよ。自作自演つうのは自作自演だと
ばれないようにやるのが自作自演なわけで。しかも>>275>>274
対するレスでもないし。

やっぱ馬鹿の集まりってのは一味違うねぇ。

279:nobodyさん
05/12/25 23:24:07
この板も早く強制ID制になってほしいものだ


280:nobodyさん
05/12/25 23:45:05
>278
バレバレの自作自演なんて数えられないくらい存在する
今回のも非常に分かりやすいな

>>272=>>274=>>275=>>278


281:nobodyさん
05/12/26 22:51:19
そういえばここって強制IDじゃないんだよね。
さすが過疎板の代名詞

282:nobodyさん
05/12/29 14:08:54 W4CzIrpP
お初で失礼します。
PHPプログラマですが既存のシステムを大人の事情でASP5.0 on IIS5.0への移行を行うことになりました。

だいたい言語仕様やアーキテクチャの仕様を調べたのですが
一つ大きな問題に直面してしまいました。
ASPsessionIDをクッキーでなく、自動でform内にhiddenで埋め込むことはできるのでしょうか?
(GETで?の後につけてはいけない)
クッキーoffでもセッションを使えるようにしなければならないというのが当初からの命題の一つなのです


283:nobodyさん
05/12/29 17:35:44 BZLcPqC6
>>282
普通にできる
hiddenで埋め込んだ値をPOST送信 か Session 変数を使えばOk

284:nobodyさん
05/12/29 21:03:25
>282 ちなみに ASP3.0 な

285:nobodyさん
05/12/29 22:37:15
ん?
Session変数はクッキーで渡されたIDをキーにサーバの値を使うものだから
クッキーレスでは使えないぞ。

それをやるとしたら…うーん。
DB使うか、ApplicationにFreeThreadedDom突っ込んで
そこにデータを出し入れするかかな。

でも実のところHiddenの防御力はCookie以下だということは
認識しておいた方がいいかと。
書き換える気になればquerystringを書き換えるのと大して変わらないので。

286:nobodyさん
05/12/30 01:45:46
>>285
確かに純粋にはくクッキーの一つだけど
でもIEのクッキー設定を無視するからクッキーoff環境でも問題ないよ

287:nobodyさん
05/12/30 03:26:10
IEならどうにでもなるんだけどね…
クッキーレスを要求するっていうことはすなわち
それ以外のブラウザでも使えるようにって要件ではないかと思われる

288:nobodyさん
06/01/01 19:02:30 Vw/N6o5Y
ディレクトリ再帰検索の降順表示について質問します。

<やりたいこと>
@特定のディレクトリの下位階層を無制限に再帰検索して展開表示
Aボタンで判別して最上位ディレクトリのみ表示か、すべて再帰的に展開表示するか選択
B表示されたディレクトリに対してonClickで開閉することが可能
Cソート機能(ディレクトリ名降順表示)

@〜BについてはソースAで動作しますが、Cで四苦八苦しています。
ディレクトリ名の降順表示はソースBの仕組みを使ったり、BASP21のソート機能等も検討しましたが、
問題は入れ子のものを展開していくなかで、途中上位のディレクトリに戻るので
動的配列を使っても展開中で再定義するとおかしくなってしまいます。
ちなみにリアルタイム性と速度を求められるので、テキストやDB格納は現段階では考えておりません。

どなたかアドバイスお願いします。

289:nobodyさん
06/01/01 19:04:32 Vw/N6o5Y
<ソースA>
<%

strPwd = Server.Mappath("./")
BTN = Request.Form("BTN")
x = 0

If BTN = "開く" Then
BTN = "閉じる"
strCatDisp = "display:block;"
Else
BTN = "開く"
strCatDisp = "display:none;"
End If

%>

<script language=JavaScript>
function ClickShow(catid){
if(document.getElementById){
if(document.getElementById(catid).style.display == 'block'){
document.getElementById(catid).style.display = 'none';
} else {
document.getElementById(catid).style.display = 'block';
}
}
}
</script>
<form method=POST>
<input type=submit name=BTN value='<%=BTN %>' class=submit>
</form>

290:nobodyさん
06/01/01 19:06:01 Vw/N6o5Y
<%

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Call DirSearch(strPwd)

'ディレクトリ検索
Sub DirSearch(TmpDir)
Set objDir = objFSO.GetFolder(TmpDir)
Set objSubDir = objDir.SubFolders
x = x + 1
For Each objSD In objSubDir
Response.Write "<span style='cursor:hand' onClick=ClickShow('cat" & x & "')>" & vbCRLF
Response.Write objSD.Name & vbCRLF
Response.Write "</span>" & vbCRLF
Response.Write "<br>" & vbCRLF
Response.Write "<div id=cat" & x & " style='" & strCatDisp & "'>" & vbCRLF
Call DirSearch(TmpDir & "\" & objSD.Name)
Response.Write "</div>" & vbCRLF
Next
End Sub

Set objSubDir = Nothing
Set objDir = Nothing
Set objFSO = Nothing
%>

291:nobodyさん
06/01/01 19:06:50 Vw/N6o5Y
<ソースB>

<%

Dim strFile()
Set Fs = Server.CreateObject("Scripting.FileSystemObject")
Set objFiles=Fs.GetFolder("C:\winnt\system32").Files
ReDim strFile(objFiles.Count-1)
For Each objFile In objFiles
tmp0=objFile.Path
For J=I-1 To 0 Step -1
If tmp0 < strFile(J) Then
Exit For
Else
strFile(J+1)=strFile(J)
End If
Next
strFile(J+1)=tmp0
I=I+1
Next

For I=0 To objFiles.Count-1
Response.Write strFile(I) & "<BR>"
Next

%>

292:288
06/01/01 19:09:55 Vw/N6o5Y
忠実に再現しようと思ったら、長くなってしまいました・・・orz
長文失礼しました。よろしくお願いします。

293:nobodyさん
06/01/01 22:50:12
>>288
速さのためって言ってるけど。
毎回全フォルダ情報をクライアントに送りつけるっていうのは
フォルダ階層の数によるがかなり重くなると思う。

俺は子への展開時にAjax使って取り直し、みたいな形で実装したことがある。

そうしないとしたら、再帰関数内で
@フォルダ内の全子フォルダを関数内の局所配列に取得
  (ソートするならその時に)
Aその配列からフォルダ名を順に取り出し、DIVを表示して再帰
とすれば大枠変えずに出来るんじゃないか。

ちなみに
>>問題は入れ子のものを展開していくなかで、途中上位のディレクトリに戻るので
>>動的配列を使っても展開中で再定義するとおかしくなってしまいます。
動的配列の再定義を繰り返すとか文字列の追加追加っていうのは
VBScript on ASPでは禁止事項。
そうやってでっち上げると忘れた頃にパフォーマンス劣化の原因になる。
VBScript上の変数にバッファリングしようとは思わないこと。
生成したデータを片っ端から表示していけるようなアルゴリズムにするのが原則。

294:288
06/01/02 20:27:19 N1rmW7hx
>>293
アドバイス有難うございます。

>>そうしないとしたら、再帰関数内で
>>@フォルダ内の全子フォルダを関数内の局所配列に取得
>>  (ソートするならその時に)
>>Aその配列からフォルダ名を順に取り出し、DIVを表示して再帰
>>とすれば大枠変えずに出来るんじゃないか。
@は再帰的に格納するということでしょうか?
再帰するのはDIV表示が終わってからではなく、表示させる前段階で再帰処理する必要があります。
だからといってソートしている最中に再帰する方法だと動的配列の再定義をせざるを得ません。
(が、うまくいきません)

>>俺は子への展開時にAjax使って取り直し、みたいな形で実装したことがある。
クリック時のフォルダ展開は言い忘れてしまいましたが、画面遷移しないという要件なので、
確かにAjaxが適していると思います。XMLHttpRequestで試してみます。ヒント有難うございました。

295:nobodyさん
06/01/03 16:07:07
>>294
>>@は再帰的に格納するということでしょうか?

いや、そうじゃなくて単階層。
再帰関数の引数は妥当な線だとあるフォルダのパスでしょ?
関数の流れをざっと書くと
1.まずそのフォルダの子フォルダ一覧を配列に取得する。
2.必要があるならソートする。
3.親フォルダのDIV開始タグを書く。
4.そしてfor〜nextで子フォルダ配列をなめながら再帰。
5.親フォルダのDIV終了タグを書く。

こんな感じでやりたいことが出来るのでは?ということ。

296:nobodyさん
06/01/04 13:03:07 O9dUywF6
大量のデータを1ページに50件ずつ1行ずつ表示させる時って、
みなさんはどうしてますか?
今のところ、全データをとりあえず取得して、
Doループで回してるのですが、
どうも負荷が大きすぎて…。

DBの方での質問なのかなとも思ったのですが、
とりあえず。

よろしくお願いします。

297:nobodyさん
06/01/04 13:36:35
>>296
漏れはこんな感じでやってる(実際はもっと細かいチェックがいろいろと)
他にもっといい方法無い?
Dim conn, rs
Dim CurrentPage, i
Const DefaultPageSize = 50
CurrentPage = Request("P")
If CurrentPage = "" Then
 CurrentPage = 1
ElseIf IsNumeric(CurrentPage) = False Then
 CurrentPage = 1
Else
 CurrentPage = CLng(CurrentPage)
End If
Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorType = adOpenKeyset
rs.LockType = adLockReadOnly
(厨略)
conn.Open
rs.PageSize = DefaultPageSize
rs.AbsolutePage = CurrentPage
rs.Open
Do Until rs.EOF Or i > DefaultPageSize
 Response.Write(rs.Fields(0).Value)
 Response.Write("<br>")
 i = i + 1
Loop
rs.Close
conn.Close
Set conn = Nothing
Set rs = Nothing

298:nobodyさん
06/01/04 22:17:29
DBがPostgreSQLだったらOFFSETとLIMITを使えば簡単。
SQLServerでも取得するデータ列にユニークなキーがあれば
TOPとnot existsを駆使することで、結構負荷軽めに
レコードセットの中間だけ取り出す事が可能だよ

299:nobodyさん
06/01/05 12:18:06
なるほど。

300:nobodyさん
06/01/05 16:56:41 KdflC/KD
VBScriptで、自分のPC(Win2000)をサーバーにして作業をしています。(この書き方おかしかったらすみません。)

Excelの既存ファイルを開き、データ書き込み、別名で保存ということをしています。
その時、作業フォルダとは別に、Cの直下に、作業フォルダ、開いたファイル、保存したファイルの3つのショートカットができるんですけど、なぜなんでしょうか?仕様ですか?

301:nobodyさん
06/01/05 18:09:35
>>300
そんなショートカット出来たこと無いぞ

302:nobodyさん
06/01/05 18:41:21
>>300
Officeいくつ?
あと、ASP越しにやってるの?それともWSH越し?

303:nobodyさん
06/01/05 22:34:33
>>296 
開始位置の格納
ページカウンタの格納
DBオープン
rs.AbsolutePosition = 開始位置

[ループ開始]

 開始位置=開始位置+1
 If 開始位置 = (ページカウンタ * 1ページあたり表示件数 + 1) Then ループ抜ける

[ループ終了]
ページングのためのリンクを表示

304:nobodyさん
06/01/05 23:21:52
>>303
それは普通の方法だから重いのでは?

305:nobodyさん
06/01/06 00:10:03
しかし全体の行数がものすごく多かったりする場合は
ひょっとするとReadForwardOnlyのレコードセットで空読みするより
素直にランダムアクセス可能なレコードセットを使う方が
結果としては速くなるやも知れんな。

やってみたこと無いから分からんけど。

306:300
06/01/06 09:03:43 1e+7Xjcv
レスありがとうございます。
>>301
そうですか・・・。
>>302
officeは2000です。
後半意味がわかりませんが(すみません)、wsfは使っていないので、ASP越しだと思います。
後、マクロを含んだExcelだと別名保存ができません。
参照設定なども必要なのでしょうか?

以下、ソースです。
<%
Dim XL
Dim XB
Dim OpenFile
Dim SaveFile
Set XL = Server.CreateObject("Excel.Application")
Err.Clear
On Error Resume Next
OpenFile = Server.MapPath("./TEST.xls")
SaveFile = Server.MapPath("./TEST1.xls")
XL.Visible = False
Set XB = XL.Application.Workbooks.Open(OpenFile)
XB.ActiveSheet.Cells(1,1).value = "AAAA"
XB.ActiveSheet.Cells(1,2).value = "BBBB"
XB.Application.DisplayAlerts = False
XB.SaveAS SaveFile
XL.Quit
Set XB = Nothing
Set XL = Nothing
%>

307:nobodyさん
06/01/06 21:31:41
>>306
ASPでOfficeとかShellとかのユーザ的なCOMを操作するのはMSのサポート外。
つまり何が起こっても文句は言えないということ。

ASP越しだとカレントディレクトリや%TEMP%変数の概念がShellと全然違うから
C:\直下に一時ファイルができたり削除されなかったりするのは仕様かもね。

308:300
06/01/07 10:51:35
>>307
ふむぅ・・・。そうなんですか。
最終的には、DBからデータを取得して、Excel開いてデータを書き込んで、
マクロ起動してグラフの表示ってことをしたいのですが、前途多難ですな。
ファイルを開くのや、マクロの起動のサンプルを拾って、アレンジしながら試しているのですが、
全く思ったように動いてくれません。

309:nobodyさん
06/01/07 14:31:30
>>308
ASPでグラフ表示はVMLを使うのが普通

310:nobodyさん
06/01/08 06:31:53
>>309
そうでもないよ

311:バッカーです ◆KeuXjwWDdE
06/01/08 20:30:42
棒グラフなら単純に画像の横や縦の設定だけでいいんじゃないの?
ビローンと伸ばすかギュッと縮めるかっつーことで

312:300
06/01/09 08:51:14
スキルアップもかねてということで、Excel操作ができるようにと、提示されているのです。
VMLって、IEのバージョン限定でしか使えないんじゃないですか?

313:nobodyさん
06/01/09 10:49:02
>>312
確かにIE4より前だと使えないが、
そんな古い環境じゃDHTMLもろくに使えないし、
今更そこまでサポートせんでもいいだろ。

ちなみにExcel.Applicationをサーバで使うのは
今ではMSの完全サポート外、むしろ止めとけって事になってるので
そこは気をつけておいた方がいいぞ。
元々Excelはクライアントアプリだから意味合い上ライセンス的にも微妙だし。
MS的にはOffice Web Componentでも使え、って話だ。

314:nobodyさん
06/01/09 14:55:35
>>312
ASP使ってグラフ表示っていうと、イントラでしょ?
イントラならIE限定でいいんじゃね?

それにIE以外だとxlsファイルもブラウザで直接見れないんじゃなかったっけ?

315:nobodyさん
06/01/14 16:04:01
>>300
SVG使えばいんでない。
とりあえず、IEでもプラグイン入れてれば見れるし。


316:nobodyさん
06/01/14 16:04:19 6WSzNtEC
ASPのIf文の条件として
varDateというある日付の入った変数を
システム日付プラス1日より過去のものはtrueという
条件をつくりたいのですが、どう記述すればよろしいでしょうか?
よろしくお願い致します。

317:nobodyさん
06/01/15 00:22:44
DateAdd(d,1,Date()) > varDate

318:nobodyさん
06/01/16 16:00:20
質問です。

Response.ContentType="application/vnd.ms-excel"
Response.AddHeader "Content-Disposition" , " attachment; filename= data.csv"

Response.Write csvdata

この様な感じで、csvファイルをクライアントに保存させようとしています。
100件程度なら問題ないのですが、数千単位のレコードになると保存のダイアログは出るものの、
ダウンロードのファイル名もaspのファイル名になってしまい、保存できません。

何か対処方法はありますでしょうか?


319:nobodyさん
06/01/16 16:01:10 UBjBFy/D
 


320:nobodyさん
06/01/16 17:08:53 rp3amqOf
つContent-lngth


321:nobodyさん
06/01/16 21:02:51
>>318
何故にexcel?

322:nobodyさん
06/01/17 14:00:57
ASP.NET(aspx)ではなく、既存のASP(asp)の『Server.createObject』を
使用して呼出すことの出来るDLL(COM)を、.NET2003で作成したいのですが、
どうしても上手くいきません...orz

〜試したこと〜
@C# ⇒ クラスライブラリで作成 ⇒ 「COM の相互運用機能に登録」オプションをtrue ⇒ DLL完成
A試しに、VBSから@で作ったDLLを呼出して見る(createObject) ⇒ 成功
BASPから@で作ったDLLを呼出して見る(Server.createObject) ⇒ 失敗..orz
ファイルまたはアセンブリ名 ClassLibrary5、またはその依存関係の 1 つが見つかりませんでした。

VBSから呼出せるってことは、レジストリに
登録されてるってことだと思う。(実際に登録されている)

なんで、ASPからだと使えない?

323:nobodyさん
06/01/17 14:42:30
>>322
IUSR_XXXがDLLに対するアクセス権を持っていない……とか。

324:322
06/01/17 15:03:56
DLLをC:\winnt\system32の下へ持っていったら...orz...動いた...

なんで?レジストリには、DLLのファイルパスまで
あったし、VBSも動いてた!!

全然、わからない!!

325:nobodyさん
06/01/17 17:18:24
つ 自分のアカウントの PATH とIISサービスの PATH が同じとは限らない。
  というか違う。

326:nobodyさん
06/01/17 21:05:04 4JhQoD7f
aspのソースって暗号化出来るんでしょうか?
dbの接続のパスとか書いてるそのままのソースを置くのは、
ちょっとアレかな〜と思いまして。


327:nobodyさん
06/01/17 21:14:51
>>326
スクリプト エンコーダ
URLリンク(www.microsoft.com)


328:nobodyさん
06/01/17 23:07:48
DBの接続文字列とかはレジストリに登録してそれをCOMあたりで呼び込むのがいいと思う。
(レジストリってVBScriptから直接呼び出せたっけ?)

329:nobodyさん
06/01/18 02:57:39
WshShell.RegRead()使えば読める……はず。そいや使ったことないや。

330:nobodyさん
06/01/18 18:40:54
>>326
このあたりをどぞ。ASP.NETとありますがASPでも適用できるかと。
Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication
Storing Database Connection Strings Securely
URLリンク(msdn.microsoft.com)

・Encrypted with DPAPI
・Clear text in Web.config or Machine.config
・UDL files
・Custom text files
・Registry
・COM+ catalog

331:638
06/01/21 13:32:23 GsEUkG9T
ASPにてシステム日付の3日前の日付を取得したいのですが、
下記のようにすると変数varAに 38735 という数字が入ってきます。
システム日付の1日後のvarBには 2006/01/22 と入るのですが、
x日前の日付の取得はどうすればよろしいのでしょうか?

varA =DateDiff("d", 3, date)
varB =DateAdd("d", 1, date)

332:nobodyさん
06/01/21 14:49:32
>>331
varB =DateAdd("d", -3, date

333:nobodyさん
06/01/21 18:49:21 AIj0kho+
326に便乗質問
俺はweb.configに置いてるけどweb.configはサーバーだけで動くとか何とか
呼んだ気がするから安心してたけどひょっとして安心ではない?

334:638
06/01/21 19:00:34 GsEUkG9T
>>332
なるほど、DateAddを使うですね。
ありがとうございました。


335:nobodyさん
06/01/22 01:05:17
>>333
ここはASP.NETスレじゃないよ><

336:nobodyさん
06/01/27 14:12:25
ASP → ASP.NET より
ASP → PHPのほうが、乗換えとして、自分の好みに合っている気ガス

337:nobodyさん
06/01/27 21:52:21
そんなあなたにpythonですよ

338:nobodyさん
06/01/29 22:28:57
ASPにはhtmlエスケープの関数ってありますか?
昔どこかのサイトで見かけた気がするのですが
失念してしまいました…。

339:nobodyさん
06/01/29 23:25:38
>>338
JScriptならできる

340:nobodyさん
06/01/30 00:12:50
>>339
レスありがとうございます。
VBscriptで書いてしまったので、
replaceでしこしこやってみますorz

341:nobodyさん
06/01/30 03:19:35
>>338-340
Server.HTMLEncode() のことじゃないの?
そうならVBScriptでも使えるけど。

342:nobodyさん
06/02/01 18:59:54 Im+A4ONK
かなり行き詰ってて助けてください。

Framework2.0(C#)ベースで作ったDLLをASPで動かしたいのですが、
XPのiis上ではうまく動くのに2003Serverのiisではクリエイトで失敗します。

Set hoge = Server.CreateObject("hoge.hoge")←ここで失敗

両環境下でRegAsmで登録しFrameworkのバージョンも同一です。

なぜ動かないか分からないのですが、
どなたかご教授お願いします。


343:nobodyさん
06/02/01 21:22:49
>>342 エラー メッセージ プリーズ

344:342
06/02/01 21:45:57
>>343
Server オブジェクト エラー 'ASP 0177 : 80070002'

Server.CreateObject に失敗しました

です。
権限とかの問題でしょうか?

345:nobodyさん
06/02/01 22:08:21
>>342 %SystemRoot%は、両方のOSで同じ名前?

346:342
06/02/01 22:18:40
>>345
2003サーバの%SystemRoot%が標準で:/windows/system32なら同じにしてます。


347:345
06/02/01 22:21:21
>>342 違ってたらゴメンネ。海外のサイトで同じような質問していて

I suspect this is because the DLL is not in a particular location that the CLR is looking
when you create the object. Try copying the DLL to C:\Winnt\System32 or C:\Windows\System32
depending upon whether you have Windows 2000 or Windows XP Professional / 2003 Server.
って答えてたから。

348:342
06/02/01 22:33:26
>>347
確認しましたらC:\windows\system32にDLLをおいてTLBを作成しているので
ほかに原因があると思います。

もしかしてRegasmで登録しているのが原因でしょうか?



349:342
06/02/02 02:42:30 bVYIWBsA
どうしても解決しないので一旦age

350:nobodyさん
06/02/03 02:47:28
ASPでIPアドレスの比較(?)をしたいと考えています。
IPマスクで192.168.1.0/24のような形式のもの(20項目程度)と$ipを比較して含まれていれば真を返すにはどのようにすればいいのでしょうか?
鯖はWinXP ProのIIS(.net Framework無し)、開発環境はVS.net 2005 ExpressEditionです。

351:nobodyさん
06/02/03 20:14:27
>>350
正規表現?

352:バッカーです ◆KeuXjwWDdE
06/02/03 20:44:49
範囲の問題じゃないの?



353:nobodyさん
06/02/04 01:23:48
まんま24ビットの整数にしてAnd取る……って話ぢゃないのか。

354:nobodyさん
06/02/04 08:16:33
.NETは知らんがVBSじゃオーバーフローしたような記憶が
>24ビットの整数にしてAnd取る

355:nobodyさん
06/02/04 10:46:54
>>350
IPが連続してるなら正規表現、
バラバラであれば配列にして比較するか、DBを使ってるならSQLだな。

356:nobodyさん
06/02/04 16:29:50
VBSでもちゃんとCLngすれば24bitも大丈夫だよ

357:350
06/02/06 02:39:19
レスありがとうございます。
$ipになってましたがipのミスですorz

検査してくれるような便利な関数があれば良いなぁと考えてたのですが無いのですか・・・。
やはり/で2つに分けて地道にホゲホゲさせないと駄目なのでしょうか?

358:nobodyさん
06/02/06 10:00:27 kQjET4Ig
文字列から検索対象文字がいくつあるかカウントする関数はありますでしょうか?
strTest という変数からchar(10)の改行文字のカウントをしたいのですが。

359:nobodyさん
06/02/06 21:24:02
俺なら地道にFunctionステートメントで、InStr()関数と
For〜Next文でループさせて数えるけどね

360:nobodyさん
06/02/06 22:22:25
>>350
ipaddrとipnetの間で比較する流れを完全に想像だけで書いてみるw

function conv(ip)
Dim ipary
ipary = split(ip,".")
conv = clng(ipary(0)*256^3) + clng(ipary(1)*256^2) + clng(ipary(2)*256) + clng(ipary(3))
end function

function bitmask(masklng)
Dim mask
mask = clng(0)
for i = 31 to 31-masklng
mask = mask + clng(2^i)
next
bitmask = clng(mask)
end function

function check(ipaddr,ipnet)
ary = split(ipnet,"/")
netaddr = conv(ary(0))
mask = bitmask(ary(1))
if (clng(netaddr) = clng(conv(ipaddr)) and clng(mask)) then
check = true
else
check = false
end if
end function

clngの挟み方は適当。多分使いすぎ。
bitmask辺りは99%の確率でバグってる悪寒w

361:360
06/02/06 22:24:50
ミスった!
bitmaskのforはstep -1 でw

362:nobodyさん
06/02/07 09:32:11 o795fuVl
レコードセットで、[列名]hoge1,hoge2,hoge3,hoge4.....hogeXXの項目のデータを取ってきて、
このデータを変数に格納したいのですが、
今のところ、
hoge1 = objRS("hoge1")
hoge2 = objRS("hoge2")
hoge3 = objRS("hoge3")
と言ったかなり格好悪いやり方をしています。
これを、スマートにするにはどうしたらいいのでしょうか。

ちなみに
1回目のレコードセットはhoge1〜hoge20
2個目のレコードセットはhoge1〜hoge25
と言ったように、
項目数も変わってくるんです。

363:nobodyさん
06/02/07 20:18:23
>>362
GetRows

364:nobodyさん
06/02/07 20:41:38
ファイルアップで質問です。

レンタルサーバでファイルアップフォームを
作成しているのですが、BASP21が使えません。
(インストールに管理者権限が必要?)

VBScriptのデフォルトではファイルアップは
できないのでしょうか?
もし、他のモジュールを使えば可能なのであれば、
ファイルをコピーするだけで動くようなものを
教えていただけると助かります。

よろしくおねがいします。

365:nobodyさん
06/02/07 21:19:33
>>364
ADO.Streamを駆使すれば可能。
来週まで待てば俺作のをupってもいいが…

URLリンク(blog.so-net.ne.jp)
こんなのがあったので参考になるんちゃうか。


366:nobodyさん
06/02/08 00:09:09
>>364
↓には、昔お世話になったことあるよ。
URLリンク(web.archive.org)

367:364
06/02/08 16:53:03
>>365,366

親切に回答いただきありがとうございます!

>>366 さんのサンプルを作ったところ、
うまくアップロードできたようです。

ただ、これを使うと通常の値
<input type="text"> などはどうやってとるのかが
知識不足のため、ソースを見てもわかりませんでした…

Upload("textbox") とかでもダメっぽいですね。。

368:nobodyさん
06/02/08 20:31:59
>>367
multipart/form-dataでUPしてBinaryReadで受け取ると
バイト単位の処理になるから、テキストフォームとかと同時にやるとなると面倒くさそうだね。
駄目文字の処理とかも必要になるし。

369:nobodyさん
06/02/09 02:36:56 v3Lm1+ha
Basp21のSendMailメソッドで質問があります。

上記メソッドを使用してメールを送信すると、
指定したアドレスに2重送信されてしまい困っています。

メールを送信する直前にDBへ履歴を登録しているので、
前回送信時刻と現在(今回送信)時刻の差(datediff)が60秒以内であれば、
メールを送信しないような処理をしているのですが無駄に終わっています…。

何かいい回避策があるようでしたら教えてください。


370:364=367
06/02/09 13:24:29
>>368

やはり受け取ったバイナリを手動でとらないとダメなんですね…ありがとうございます。
ファイルアップとテキストフォームの組み合わせは引き続き調べてみます。

371:バッカーです ◆KeuXjwWDdE
06/02/09 18:39:04
>>369
アルゴリズムに問題があるのではないかと

372:nobodyさん
06/02/09 21:01:53
VBScriptで17桁の整数を扱う方法ってある?
通貨型じゃ15桁+小数部4桁だよね?


373:nobodyさん
06/02/09 22:59:46
京の位に達するのか。
ASPでどんな計算をしようとしているんだw

文字列でいいんじゃねーのけ?

374:nobodyさん
06/02/10 00:55:41
>>369
その手の質問はBASPの掲示板でしたほうがいいと思うよ

375:nobodyさん
06/02/10 01:31:16 gbK8yDLA
Ajaxっぽい非同期通信を組み込んでいて詰まってしまいました。

クライアント側
httpObj.open("GET","gettext.asp?sendData="+Data,true);
httpObj.send(null); //これで送って

サーバー側
getData = Request.QueryString("sendData")     'これで受け取る○

これはうまくいったのですが、送るデータ量が大きくなるとオーバーフローエラー
がでてしまいました。そこでPOSTで送ることにしました。
ところが受け取りがまったく反応してくれません。

クライアント側
httpObj.open("POST","gettext.asp",true);
httpObj.send("sendData="+Data); //これで送って

サーバー側
getData = Request.Form("sendData")         'これで受け取る×
getData = Request.QueryString("sendData")     'これで受け取る×

解決策がありましたらよろしくお願いいたします。

376:nobodyさん
06/02/10 06:35:31
>>336
URLリンク(asp2php.naken.cc)
ダウンロードしたら解凍してできたexeファイルの上に、
**.aspのソースをドラッグドロップするだけですよ

377:nobodyさん
06/02/10 19:40:27
>>375
send前に
httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
をつけるのをマジおすすめ

378:sage
06/02/10 23:36:15 gbK8yDLA
>>377
無事動きました!ありがとうございます!

379:nobodyさん
06/02/11 03:19:38
win2003鯖(web Edition)+IIS6.0+VBscript+BASP21でメール送信をしようとしています。
PHPのmail()関数を使ってメールの送信ができたのでSMTPには問題なさそうです。
ところがVBscriptからだとSMTPで認証を要求されます。

この場合、実行ユーザが違うから権限が違うのかな、と思ったのですが、
Win鯖にうとくどのサービスがどのユーザで実行するか調べたいのですが、
どこで見れるのか教えていただけますでしょうか
また、ググってみたところ、2003web Editionにはユーザ管理機能はない、
URLリンク(www.fmmc.or.jp)〜fm/nwts/w2003s/ch1/1_1_3.html
なんて書いてあるんですがまじですか?

380:nobodyさん
06/02/11 07:14:57
>>379
なんだか全然スレ違いくさいが。

>win2003鯖(web Edition)+IIS6.0+VBscript+BASP21でメール送信をしようとしています。
2003ServerにSMTPが動いていて、同じサーバ上からそれを使って送信、
ということでOK?

>VBscriptからだとSMTPで認証を要求されます。
どんな認証が要求される?
ダイアログなどを詳しく。

>この場合、実行ユーザが違うから権限が違うのかな、と思ったのですが、
>Win鯖にうとくどのサービスがどのユーザで実行するか調べたいのですが、
SMTPサービスの実行権限を調べたいなら
コントロールパネル→管理ツール→サービス

>2003web Editionにはユーザ管理機能はない
ActiveDirectoryが無いというだけで、サーバ内でのユーザ管理はもちろんある

381:nobodyさん
06/02/11 15:21:43
>>380

全然見当違いなところのエラーでした。
BASP21でメールサーバをIPで指定していたんですが、
ループバック(127.0.0.1)で指定したら(゚д゚)ウマーでした
おそらくSMTPのリレー関係の設定の問題でした。
ごめんなさい

382:nobodyさん
06/02/15 14:02:53
FileSystemObjectで、仮想ディレクトリ内にファイルをコピーしたり削除する場合、
そのフォルダに対して、
「インターネットゲストアカウント PC名\IUSR_PC名」のユーザーアカウントに、
フルアクセスの権限を与えています。

セキュリティーの観点から、こういうのは危ないんでしょうか?


383:nobodyさん
06/02/15 21:10:42 lSEl6laF
.
.
Dim GetDate

for i=startYear to lastYear
GetDate = obj.xxxx
i = i + 1
next
.
.
このような形で年度別にGetDateに配列でデータを格納しています。
この年度別に作られる配列を一つの配列変数に代入したいのですが、
どうすればよろしいでしょうか?

384:nobodyさん
06/02/15 22:15:43
>>382
フルアクセスは実行権限含むからまずい
読み取り+書き込み、がいいかと。

>>383
>>GetDate = obj.xxxx
にループ変数iが絡んでいないのだが?

あと
>>年度別に作られる配列を一つの配列変数に代入したい
言わんとしてる事はなんとなくは分かるが
やりたいことをもう少し具体的かつ厳密に。

385:nobodyさん
06/02/16 01:51:09 joFVC4f3
ASPをApacheで動かしたい。
何かよい手はないかな?


386:nobodyさん
06/02/16 07:33:17
>>385
Apache:ASP

387:nobodyさん
06/02/17 16:12:51
画像アップロード板みたいなのを作ってるんですが、
データベース部分に、画像のアドレスや、その他情報を書き込み、
画像はBASP21を使いFTPでアップロードしようとしています。


普通なら、トランザクションを開始して、レコードを書き込んで、
ファイルもアップロードしてからコミットという考えだと思うんですが、
webのシステムの場合、ファイルのアップロードのような時間のかかる処理を、
トランザクション内に入れないほうが良いのでしょうか?

webの開発は始めてなので「どうなんだろう??」と悩んでしまい、、、


388:nobodyさん
06/02/17 16:21:15
>>387
アップロードされるファイルサイズによるが、
普通はアップロードが完了してからDBに書き込むと思うぞ。

あと、BASP21はFTPじゃなくてHTTPのアップロードだと思う。

389:nobodyさん
06/02/17 17:08:21
>>388
ファイルの名前をDBのIDと関連付けて登録したかったので、
DB→ファイルのアップロードと考えてました。

アップロード→DBとするなら、
もう1個別に採番用テーブルを作ってそれをファイル名とIDにする感じですかね?


390:nobodyさん
06/02/17 17:57:05
>>389

> ファイルの名前をDBのIDと関連付けて登録したかった

それなら

UP用TEMPフォルダへアップロード

ファイルチェック

DBへ登録&ID取得

正式なフォルダに移動&リネーム

が一番かな。
何にせよ、ファイルアップロードはクライアント側でアップロードをミスることが多いし、
ファイルのチェックとかもしなきゃいけないでしょ?



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4887日前に更新/289 KB
担当:undef